/********************************** LIWI控制器PC开发库 *************************************************
**--------------文件信息--------------------------------------------------------------------------------
**文件名: liwishell.h
**创建人: liwi
**时间:   20240708
**版本:   1.4.7
**描述:   用户接口头文件
********************************************************************************************************/

#ifndef _LIWISHELL_H
#define _LIWISHELL_H

#ifndef _WIN32
#define __stdcall
#endif

/*********************************************************
数据类型定义
**********************************************************/
#ifdef _WIN32
#ifdef __MINGW32__
typedef unsigned long long uint64;
typedef long long      int64;
#else
typedef unsigned __int64 uint64;
typedef __int64        int64;
#endif
#else
typedef unsigned long long uint64;
typedef long long      int64;
#endif
typedef unsigned char  BYTE;
typedef unsigned short WORD;
typedef unsigned char  uint8;                   /* defined for unsigned 8-bits integer variable      无符号8位整型变量  */
typedef signed   char  int8;                    /* defined for signed 8-bits integer variable        有符号8位整型变量  */
typedef unsigned short uint16;                  /* defined for unsigned 16-bits integer variable     无符号16位整型变量 */
typedef signed   short int16;                   /* defined for signed 16-bits integer variable       有符号16位整型变量 */
typedef unsigned int   uint32;                  /* defined for unsigned 32-bits integer variable     无符号32位整型变量 */
typedef signed   int   int32;                   /* defined for signed 32-bits integer variable       有符号32位整型变量 */
typedef float          fp32;                    /* single precision floating point variable (32bits) 单精度浮点数（32位长度）*/
typedef double         fp64;                    /* double precision floating point variable (64bits) 双精度浮点数（64位长度）*/
typedef unsigned int   uint;                    /* defined for unsigned 32-bits integer variable     无符号32位整型变量*/

//通道句柄定义
typedef  void* PMC_HANDLE;

/************************************************/
//错误码 
/************************************************/
#define ERR_OK       0
#define ERROR_OK     0
#define ERR_SUCCESS  0

enum ERR_CODE_PMC
{
	ERR_CODE_UNKNOWN        = 1,    	//未知
	ERR_CODE_PARAERR        = 2,    	//参数错误
	ERR_CODE_TIMEOUT        = 3,    	//超时
	ERR_CODE_BUSY           = 4,    	//繁忙
	ERR_CODE_LINKTOOMANY    = 5,    	//链接过多
	ERR_CODE_OSERR          = 6,    	//系统错误
	ERR_CODE_CANNOT_OPENCOM = 7,    	//无法链接串口
	ERR_CODE_CANNOT_CONNECTETH = 8, 	//无法链接网口
	ERR_CODE_HANDLEERR      = 9,    	//链接错误
	ERR_CODE_SENDERR        = 10,   	//发送出错
	ERR_CODE_GFILEERR       = 11,   	//G文件语法错误
	ERR_CODE_FIRMWAREERR    = 12,   	//固件文件错误
	ERR_CODE_FILENAME_TOOLONG = 13, 	//文件名太长
	ERR_CODE_FIRM_MISMATCH  = 14,   	//固件文件不匹配
	ERR_CODE_NOTSUPPORT     = 15,   	//对应的卡不支持这个功能
	ERR_CODE_BUFFER_TOOSMALL = 16,  	//输入的缓冲太小
	ERR_CODE_NEEDPASSWORD   = 17,   	//密码保护
	ERR_CODE_PASSWORD_ENTERTOOFAST = 18,//密码输入太快
	ERR_CODE_INVALID_SOCKET = 19,		//创建socket失败
	ERR_CODE_IOCTLSOCKET_FAILED = 20,	//设置socket为非阻塞模式失败
	ERR_CODE_SELECT_FAILED = 21,		//select连接失败

	ERR_CODE_GET_LENGTHERR  = 100,  	//收到的数据包的长度错误
	ERR_CODE_COMPILE_OFFSET = 1000, 	//文件编译错误

	ERR_CODE_CONTROLLERERR_OFFSET = 100000, //控制器上面传来的错误，加上这个偏移
};

//程序运行状态
enum SHELL_PROGRAMSTATE
{
	PROGRAM_STATE_STOP 	 = 1,	//停止
	PROGRAM_STATE_RUNING = 3,	//运行
	PROGRAM_STATE_PAUSE  = 5,	//暂停
	PROGRAM_STATE_ERROR  = 100,	//查询的时候如果ID出错返回这个值
};

//任务状态
enum SHELL_TASKSTATE
{
	TASK_STATE_STOP     = 0,	//停止
	TASK_STATE_RUNING   = 1,	//运行
	TASK_STATE_PAUSE    = 3,    //暂停
	TASK_STATE_ERROR    = 100,  //查询的时候如果ID出错返回这个值
};

/*********************************************************
函数声明
**********************************************************/

/*************************************************************
Description:		//发送字符串命令到控制器 缓冲方式
handle:				//控制器连接句柄
pszCommand:			//字符串命令
psResponse:			//返回的字符串	
uiResponseLength:   //返回的字符长度
Return:				//错误码
*************************************************************/
int32 __stdcall PMC_Execute(PMC_HANDLE handle, const char* pszCommand, char* psResponse, uint32 uiResponseLength);

/*************************************************************
Description:    	//发送字符串命令到控制器 直接方式
handle:				//控制器连接句柄
pszCommand:			//字符串命令
psResponse:			//返回的字符串	
uiResponseLength:   //返回的字符长度
Return:				//错误码
*************************************************************/
int32 __stdcall PMC_Command(PMC_HANDLE handle, const char* pszCommand, char* psResponse, uint32 uiResponseLength);

/*************************************************************
Description:    //与控制器建立链接，串口方式
comid:          //连接的COM口编号
phandle:        //返回的控制器连接句柄
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_OpenCom(uint32 comid, PMC_HANDLE *phandle);

/*************************************************************
Description:    		//可以修改缺省的波特率等设置
dwBaudRate:          	//波特率，缺省：115200 
dwByteSize:				//数据位，缺省：8位    
dwParity=NOPARITY:		//校验位，0/1/2 	   
dwStopBits=ONESTOPBIT:	//停止位，0/1/2 
				
uint32 dwByteSize = 8, uint32 dwParity = NOPARITY, uint32 dwStopBits = ONESTOPBIT
windows:
#define NOPARITY            0
#define ODDPARITY           1
#define EVENPARITY          2
注意: ONESTOPBIT 不是1
#define ONESTOPBIT          0
#define ONE5STOPBITS        1
#define TWOSTOPBITS         2
linux:
dwParity:0/1/2
dwStopBits
1:1个停止位
2:2个停止位	   

Return:         		//错误码
*************************************************************/
int32 __stdcall PMC_SetComDefaultBaud(uint32 dwBaudRate, uint32 dwByteSize, uint32 dwParity, uint32 dwStopBits);

/*************************************************************
Description:    //修改控制器IP地址
handle:         //控制器连接句柄	
ipaddress:      //设置的IP地址值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetIp(PMC_HANDLE handle, const char *ipaddress);

/*************************************************************
Description:    //读取当前控制器的IP地址, 注意:当设置dhcp以后，设置的IP与实际的不一致
handle:         //控制器连接句柄
ipaddress:      //返回的IP地址  
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetIp(PMC_HANDLE handle, char *ipaddress);

/*************************************************************
Description:    //与控制器建立链接 ModbusTCP
ipaddr:         //连接的IP地址			
phandle:        //返回的控制器连接句柄	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_OpenEth(const char *ipaddr, PMC_HANDLE *phandle);

/*************************************************************
Description:    //与控制器建立链接 ModbusTCP
ipaddr:         //连接的IP地址			
uims:           //响应时间，ms			
phandle:        //返回的控制器连接句柄	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_OpenEth2(const char *ipaddr, uint32 uims, PMC_HANDLE *phandle);

/*************************************************************
Description:    //与控制器建立链接 ModbusRTU
ipaddr:         //连接的IP地址			
phandle:        //返回的控制器连接句柄	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_OpenEthModbusRTU(const char *ipaddr, PMC_HANDLE *phandle);

/*************************************************************
Description:    //与控制器建立链接 ModbusRTU
ipaddr:         //连接的IP地址			
uims:           //响应时间，ms			
phandle:        //返回的控制器连接句柄	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_OpenEthModbusRTU2(const char *ipaddr, uint32 uims, PMC_HANDLE *phandle);

/*************************************************************
Description:    //快速检索IP列表
ipaddrlist:		//搜索到的全部IP地址
addrbufflength: //搜索返回的IP地址总长度	
uims:          	//搜索超时时间ms
Return:         //错误码, ERR_OK表示有搜索到
*************************************************************/
int32 __stdcall PMC_SearchEthlist(char *ipaddrlist, uint32 addrbufflength, uint32 uims);

/*************************************************************
Description:    //快速检索控制器
ipaddress:      //控制器IP地址	
uims:           //检索时间
Return:         //错误码, ERR_OK表示有搜索到
*************************************************************/
int32 __stdcall PMC_SearchEth(const char *ipaddress, uint32 uims);

/*************************************************************
Description:    //设置日志文件保存路径（不保存日志设置路径为""）
handle:         //控制器连接句柄	
pFilePath:      //日志文件路径		
logFlag:        //标志位 0x01:记录调用函数及参数值 0x02:记录函数返回值 0x04:记录系统时间
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetLogFile(PMC_HANDLE handle, const char *pFilePath, int logFlag);

/*************************************************************
Description:    //关闭控制器链接
handle:         //控制器连接句柄
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Close(PMC_HANDLE handle);

/*************************************************************
Description:    //继续运行BAS项目
handle:         //控制器连接句柄
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Resume(PMC_HANDLE handle);

/*************************************************************
Description:    //暂停运行BAS项目
handle:         //控制器连接句柄
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Pause(PMC_HANDLE handle);

/*************************************************************
Description:    //停止运行BAS项目
handle:         //控制器连接句柄
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Stop(PMC_HANDLE handle);

/*************************************************************
Description:    //设置命令的延时等待时间
handle:         //控制器连接句柄	
timems:         //连接的等待时间，单位毫秒
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetTimeOut(PMC_HANDLE handle, uint32 timems);

/*************************************************************
Description:    //读取命令的延时等待时间
handle:         //控制器连接句柄			
ptimems:        //返回的连接的等待时间，单位毫秒
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetTimeOut(PMC_HANDLE handle, uint32* ptimems);

/*************************************************************
Description:    //读取系统状态
handle:         //控制器连接句柄					
pstate:         //返回的程序运行状态，SHELL_PROGRAMSTATE	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetState(PMC_HANDLE handle, uint8 *pstate);

/*************************************************************
Description:    //读取链接控制器的轴数
handle:         //控制器连接句柄	
pmaxAxis:       //返回的轴数			
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMaxAxis(PMC_HANDLE handle, int *pmaxAxis);

/*************************************************************
Description:    //BAS或LWB文件下载到控制器运行
handle:         //控制器连接句柄			
Filename:       //BAS或LWB文件路径			 
run_mode:       //RAM-ROM  0-RAM  1-ROM
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_BasDown(PMC_HANDLE handle, const char *Filename, uint32 run_mode);

/*************************************************************
Description:    	//运行停止的BAS项目
handle:          	//控制器连接句柄					
pfilenameinControl:	//文件名,当为""的时候运行缺省文件
Return:         	//错误码
*************************************************************/
int32 __stdcall PMC_RunBasFile(PMC_HANDLE handle, const char* pfilenameinControl);

/*************************************************************
Description:    //读取输入信号
handle:         //控制器连接句柄	
ionum:          //输入口编号		 
piValue:        //返回的输入口状态		 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetIn(PMC_HANDLE handle, int ionum, uint32 *piValue);

/*************************************************************
Description:	//读全部输入口
handle:			//控制器连接句柄	 
pIoState:		//返回的输入口信号，0-无效，1-有效
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetInAll(PMC_HANDLE handle, uint32* pIoState);

/*************************************************************
Description:    //打开输出信号
handle:         //控制器连接句柄	 
ionum:          //输出口编号		 
iValue:         //设置的输出口状态
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetOp(PMC_HANDLE handle, int ionum, uint32 iValue);

/*************************************************************
Description:    //读取输出口状态
handle:         //控制器连接句柄
ionum:          //输出口编号	 
piValue:        //返回的输出口状态	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetOp(PMC_HANDLE handle, int ionum, uint32 *piValue);

/*************************************************************
Description:    //读取模拟量输入信号
handle:         //控制器连接句柄	 
ionum:          //AIN口编号			 			
pfValue:        //返回的模拟量值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetAD(PMC_HANDLE handle, int ionum, float *pfValue);

/*************************************************************
Description:    //打开模拟量输出信号
handle:         //控制器连接句柄	
ionum:          //DA输出口编号			
fValue:         //设定的模拟量值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetDA(PMC_HANDLE handle, int ionum, float fValue);

/*************************************************************
Description:    //读取模拟输出口状态
handle:         //控制器连接句柄	 
ionum:          //模拟量输出口编号	 			
pfValue:        //返回的模拟量值	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetDA(PMC_HANDLE handle, int ionum, float *pfValue);

/*************************************************************
Description:    //设置输入口反转
handle:         //控制器连接句柄			
ionum:          //输入口编号				 
bifInvert:      //状态 1-反转开 0-反转关
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetInvertIn(PMC_HANDLE handle, int ionum, int bifInvert);

/*************************************************************
Description:    //读取输入口反转状态
handle:         //控制器连接句柄			
ionum:          //输入口编号				 
piValue:        //返回的状态 1-反转开 0-反转关	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetInvertIn(PMC_HANDLE handle, int ionum, int *piValue);

/*************************************************************
Description:    //设置pwm频率
handle:         //控制器连接句柄			
ionum:          //PWM编号口					 
fValue:         //频率 硬件PWM1M 软PWM 2K
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetPwmFreq(PMC_HANDLE handle, int ionum, float fValue);

/*************************************************************
Description:    //读取pwm频率
handle:         //控制器连接句柄	
ionum:          //PWM口编号			 
pfValue:        //返回的频率		 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetPwmFreq(PMC_HANDLE handle, int ionum, float *pfValue);

/*************************************************************
Description:    //设置pwm占空比
handle:         //控制器连接句柄			
ionum:          //PWM口编号					 
fValue:         //占空比 0-1 0表示关闭PWM口
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetPwmDuty(PMC_HANDLE handle, int ionum, float fValue);

/*************************************************************
Description:    //读取pwm占空比
handle:         //控制器连接句柄
ionum:          //PWM口编号
pfValue:        //返回的占空比
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetPwmDuty(PMC_HANDLE handle, int ionum, float *pfValue);

/*************************************************************
Description:    //读取参数，可以一次读多个
handle:         //控制器连接句柄	
paraId:         //参数Id       				
paraIndex:      //数组序号       			
paraNum:        //参数个数       			
pValue:         //返回的参数值					
pValueNum:      //返回的参数个数				
Return：		//错误码
*************************************************************/
int32 __stdcall PMC_ReadDrawParaList(PMC_HANDLE handle, const uint16 *paraId, const uint16 *paraIndex, int32 paraNum, int64 *pValue, int32 *pValueNum);

/*************************************************************
Description:    //读取Cmd类型
handle:         //控制器连接句柄	
pParaCmdType:   //返回的Cmd类型	
Return：		//错误码
*************************************************************/
int32 __stdcall PMC_GetParaCmdType(PMC_HANDLE handle, uint8 *pParaCmdType);

/*************************************************************
Description:    //快速读取多个当前的输入状态
handle:         //控制器连接句柄	
ionumfirst:     //IN起始编号		 
ionumend:       //IN结束编号			
pValueList:     //返回的状态 按位存储	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetModbusIn(PMC_HANDLE handle, int ionumfirst, int ionumend, uint8 *pValueList);

/*************************************************************
Description:    //快速读取多个当前的输出状态
handle:         //控制器连接句柄	
ionumfirst:     //OUT起始编号		 
ionumend:       //OUT结束编号			
pValueList:     //返回的状态 按位存储	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetModbusOut(PMC_HANDLE handle, int ionumfirst, int ionumend, uint8 *pValueList);

/*************************************************************
Description:    //快速读取多个当前的DPOS
handle:         //控制器连接句柄			
imaxaxises:     //轴数量					 
pValueList:     //返回的坐标值 从轴0开始	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetModbusDpos(PMC_HANDLE handle, int imaxaxises, float *pValueList);

/*************************************************************
Description:    //快速读取多个当前的MPOS
handle:         //控制器连接句柄				 
imaxaxises:     //轴数量						 
pValueList:     //返回的反馈坐标值 从轴0开始	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetModbusMpos(PMC_HANDLE handle, int imaxaxises, float *pValueList);

/*************************************************************
Description:    //快速读取多个当前的速度
handle:         //控制器连接句柄			
imaxaxises:     //轴数量	
pValueList:     //返回的当前速度 从轴0开始	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetModbusCurSpeed(PMC_HANDLE handle, int imaxaxises, float *pValueList);

/*************************************************************
Description:    //通用的参数修改函数 sParam: 填写参数名称
handle:         //控制器连接句柄		 
sParam:         //轴参数名称 "DPOS"...	 
iaxis:          //轴号					 
fset:           //设定的轴参数值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetParam(PMC_HANDLE handle, const char *sParam, int iaxis, float fset);

/*************************************************************
Description:    //参数 通用的参数读取函数, sParam:填写参数名称
handle:         //控制器连接句柄		
sParam:         //轴参数名称 "DPOS"...	 
iaxis:          //轴号	
pfValue:        //返回的轴参数值		  
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetParam(PMC_HANDLE handle, const char *sParam, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置加速度
handle:         //控制器连接句柄	
iaxis:          //轴号				 
fValue:         //设置的加速度
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetAccel(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取加速度
handle:         //控制器连接句柄	
iaxis:          //轴号				 
pfValue:        //返回的加速度		 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetAccel(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取叠加轴
handle:         //控制器连接句柄					
iaxis:          //轴号								 
piValue:        //返回的轴叠加轴号，无叠加轴时为-1	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetAddax(PMC_HANDLE handle, int iaxis, int32 *piValue);

/*************************************************************
Description:    //设置轴告警信号
handle:         //控制器连接句柄					
iaxis:          //轴号								 
iValue:         //报警信号输入口编号，取消时设定-1
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetAlmIn(PMC_HANDLE handle, int iaxis, int32 iValue);

/*************************************************************
Description:    //读取告警信号
handle:         //控制器连接句柄		
iaxis:          //轴号	
piValue:        //返回的报警信号输入口编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetAlmIn(PMC_HANDLE handle, int iaxis, int32 *piValue);

/*************************************************************
Description:    //设置轴类型
handle:         //控制器连接句柄	 
iaxis:          //轴号				 
iValue:         //轴类型
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetAtype(PMC_HANDLE handle, int iaxis, int32 iValue);

/*************************************************************
Description:    //读取轴类型
handle:         //控制器连接句柄					 
iaxis:          //轴号
piValue:        //返回的轴类型		 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetAtype(PMC_HANDLE handle, int iaxis, int32 *piValue);

/*************************************************************
Description:    //读取轴状态
handle:         //控制器连接句柄					
iaxis:          //轴号								 
piValue:        //返回的状态值，对应的位表示不同状态	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetAxisStatus(PMC_HANDLE handle, int iaxis, int32 *piValue);

/*************************************************************
Description:    //设置轴地址
handle:         //控制器连接句柄	
iaxis:          //轴号				 
iValue:         //轴地址设定值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetAxisAddress(PMC_HANDLE handle, int iaxis, int32 iValue);

/*************************************************************
Description:    //读取轴地址
handle:         //控制器连接句柄	
iaxis:          //轴号				  
piValue:        //返回的轴地址值		 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetAxisAddress(PMC_HANDLE handle, int iaxis, int32 *piValue);

/*************************************************************
Description:    //设置轴使能
handle:         //控制器连接句柄		
iaxis:          //轴号	
iValue:         //使能状态 0-关闭 1- 打开
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetAxisEnable(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取轴使能状态
handle:         //控制器连接句柄				 
iaxis:          //轴号							 
piValue:        //返回的使能状态，0-关闭 1-打开	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetAxisEnable(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置链接速率
handle:         //控制器连接句柄	 
iaxis:          //轴号				
fValue:         //同步连接速率
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetClutchRate(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取链接速率
handle:         //控制器连接句柄	
iaxis:          //轴号				
pfValue:        //返回的连接速率 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetClutchRate(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置拐角减速
handle:         //控制器连接句柄	 
iaxis:          //轴号				
iValue:         //拐角减速模式
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetCornerMode(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取拐角减速
handle:         //控制器连接句柄	
iaxis:          //轴号				
piValue:        //返回的拐角减速模式	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetCornerMode(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置回零爬行速度
handle:         //控制器连接句柄	
iaxis:          //轴号				
fValue:         //设置的速度值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetCreep(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取回零爬行速度
handle:         //控制器连接句柄	
iaxis:          //轴号				
pfValue:        //返回的爬行速度值	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetCreep(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置原点信号，设定-1为取消原点设置
handle:         //控制器连接句柄			 
iaxis:          //轴号						
iValue:         //设置的原点信号输入口编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetDatumIn(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取原点信号
handle:         //控制器连接句柄		
iaxis:          //轴号	
piValue:        //返回的原点输入口编号	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetDatumIn(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置减速度
handle:         //控制器连接句柄	
iaxis:          //轴号				
fValue:         //设置的减速度值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetDecel(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取减速度
handle:         //控制器连接句柄	 
iaxis:          //轴号
pfValue:        //返回的减速度		 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetDecel(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置拐角减速角度，开始减速角度，单位为弧度
handle:         //控制器连接句柄		
iaxis:          //轴号					
fValue:         //设置的拐角减速角度
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetDecelAngle(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取拐角开始减速角度，单位为弧度
handle:         //控制器连接句柄		
iaxis:          //轴号					
pfValue:        //返回的拐角减速角度	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetDecelAngle(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置轴位置
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的坐标值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetDpos(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取轴位置
handle:         //控制器连接句柄		
iaxis:          //轴号					
pfValue:        //返回的命令位置坐标	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetDpos(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取内部编码器值（总线绝对值伺服时为绝对值位置）
handle:         //控制器连接句柄
iaxis:          //轴号		
pfValue:        //返回的内部编码器值	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetEncoder(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取当前运动的最终位置
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的最终位置
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetEndMove(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取当前和缓冲中运动的最终位置，可以用于相对绝对转换
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的最终位置	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetEndMoveBuffer(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置SP运动的结束速度
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设定的结束速度值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetEndMoveSpeed(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取SP运动的结束速度
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的结束速度值	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetEndMoveSpeed(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置快速JOG输入
handle:         //控制器连接句柄	
iaxis:          //轴号
iValue:         //快速JOG输入口编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetFastJog(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取快速JOG输入
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的JOG输入口编号	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetFastJog(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置快速减速度
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设定的快速减速度
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetFastDec(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取快速减速度
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的快速减速度	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetFastDec(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取随动误差
handle:         //控制器连接句柄	 
iaxis:          //轴号
pfValue:        //返回的随动误差
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetFe(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置保持输入
handle:         //控制器连接句柄	
iaxis:          //轴号
iValue:         //设置的输入口编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetFholdIn(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取保持输入
handle:         //控制器连接句柄			 
iaxis:          //轴号						
piValue:        //返回的输入HOLDIN输入口编号	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetFholdIn(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置轴保持速度
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的速度值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetFhspeed(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取轴保持速度
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的保持速度	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetFhspeed(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置SP运动的运行速度
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的运行速度值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetForceSpeed(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取SP运动的运行速度
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的运行速度值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetForceSpeed(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置正向软限位，取消时设置一个较大值即可
handle:         //控制器连接句柄
iaxis:          //轴号
fValue:         //设置的正向软限位值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetFsLimit(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取正向软限位
handle:         //控制器连接句柄
iaxis:          //轴号
pfValue:        //返回的正向限位坐标	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetFsLimit(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置小圆限速最小半径
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的限速最小半径
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetFullSpRadius(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取小圆限速最小半径
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的限速最小半径	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetFullSpRadius(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置正向硬限位输入，设置成-1时表示不设置限位
handle:         //控制器连接句柄
iaxis:          //轴号
iValue:         //设置的限位输入口编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetFwdIn(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取正向硬限位输入
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的正向限位输入口编号	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetFwdIn(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置正向JOG输入
handle:         //控制器连接句柄
iaxis:          //轴号
iValue:         //设置的JOG输入口编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetFwdJog(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取正向JOG输入
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的JOG输入口编号 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetFwdJog(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //读取轴是否运动结束
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回运行状态 0-运动中 -1 停止
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetIfIdle(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置脉冲输出模式
handle:         //控制器连接句柄						
iaxis:          //轴号									
iValue:         //设置的脉冲输出模式 脉冲+方向/双脉冲
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetInvertStep(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取脉冲输出模式
handle:         //控制器连接句柄	
iaxis:          //轴号
piValue:        //返回的脉冲输出模式	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetInvertStep(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置插补时轴是否参与速度计算，缺省参与（1）。此参数只对直线和螺旋的第三个轴起作用
handle:         //控制器连接句柄
iaxis:          //轴号	
iValue:         //模式 0-不参数 1-参与
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetInterpFactor(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取插补时轴是否参与速度计算，缺省参与（1）。此参数只对直线和螺旋的第三个轴起作用
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的速度计算模式	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetInterpFactor(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置JOG时速度
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设定的JOG时速度	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetJogSpeed(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取JOG时速度
handle:         //控制器连接句柄	
iaxis:          //轴号	
pfValue:        //返回的JOG时速度值	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetJogSpeed(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取当前链接运动的参考轴号
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的链接参考轴号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetLinkax(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //读取当前除了当前运动是否还有缓冲 
handle:         //控制器连接句柄								
iaxis:          //轴号											
piValue:        //返回的状态值  -1 没有剩余运动 0-还有剩余运动	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetLoaded(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置轴起始速度
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的起始速度
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetLspeed(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取轴起始速度
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的起始速度值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetLspeed(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置回零反找等待时间
handle:         //控制器连接句柄 
iaxis:          //轴号
iValue:         //回零反找等待时间 ms
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetHomeWait(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取回零反找等待时间
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的反找等待时间	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetHomeWait(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //读取编码器锁存示教返回状态
handle:         //控制器连接句柄							
iaxis:          //轴号										
piValue:        //返回的锁存触发状态 -1-锁存触发 0-未触发	  
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMark(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //读取编码器锁存示教B返回状态
handle:         //控制器连接句柄							
iaxis:          //轴号										
piValue:        //返回的锁存触发状态 -1-锁存触发 0-未触发		  
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMarkB(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //读取编码器锁存示教C返回状态
handle:         //控制器连接句柄							
iaxis:          //轴号										
piValue:        //返回的锁存触发状态 -1-锁存触发 0-未触发	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMarkC(PMC_HANDLE handle, int iaxis, int32 *piValue);

/*************************************************************
Description:    //读取编码器锁存示教D返回状态
handle:         //控制器连接句柄							
iaxis:          //轴号										
piValue:        //返回的锁存触发状态 -1-锁存触发 0-未触发	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMarkD(PMC_HANDLE handle, int iaxis, int32 *piValue);

/*************************************************************
Description:    //设置脉冲输出最高频率
handle:         //控制器连接句柄
iaxis:          //轴号
iValue:         //设置的最高脉冲频率
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetMaxSpeed(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取脉冲输出最高频率
handle:         //控制器连接句柄	
iaxis:          //轴号
piValue:        //返回的脉冲最高频率
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMaxSpeed(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置连续插补
handle:         //控制器连接句柄								
iaxis:          //轴号											
iValue:         //连续插补开关 0-关闭连续插补 1-打开连续插补
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetMerge(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取连续插补状态
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的连续插补开关状态	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMerge(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //读取当前被缓冲起来的运动个数
handle:         //控制器连接句柄	
iaxis:          //轴号 
piValue:        //返回的缓冲运动数		 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMovesBuffered(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置当前正在运动指令的MOVE_MARK标号
handle:         //控制器连接句柄	
iaxis:          //轴号 
iValue:         //设置当前Mark标号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetMoveCurmark(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取当前正在运动指令的MOVE_MARK标号
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的当前MARK标号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMoveCurmark(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //读取运动指令的MOVE_MARK标号
handle:         //控制器连接句柄	
iaxis:          //轴号
piValue:        //返回的MARK值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMovemark(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置运动指令的MOVE_MARK标号，每当有运动进入轴运动缓冲时MARK自动+1
handle:         //控制器连接句柄	
iaxis:          //轴号
iValue:         //设定的MARK值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetMovemark(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //设置反馈位置
handle:         //控制器连接句柄
iaxis:          //轴号
fValue:         //当前轴测量反馈位置值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetMpos(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取反馈位置
handle:         //控制器连接句柄
iaxis:          //轴号
pfValue:        //返回的轴反馈位置坐标	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMpos(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取反馈速度
handle:         //控制器连接句柄
iaxis:          //轴号
pfValue:        //返回的实时的轴反馈速度	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMspeed(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取当前正在运动指令类型
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的当前运动类型	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetMtype(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置修改偏移位置
handle:         //控制器连接句柄	 
iaxis:          //轴号
fValue:         //设置的偏移值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetOffpos(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取修改偏移位置
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的偏移坐标值	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetOffpos(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取返回锁存的测量反馈位置(MPOS)
handle:         //控制器连接句柄	 
iaxis:          //轴号
pfValue:        //返回的锁存坐标位置	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRegPos(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取返回锁存的测量反馈位置B(MPOS)
handle:         //控制器连接句柄	 
iaxis:          //轴号
pfValue:        //返回的锁存坐标位置 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRegPosB(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取返回锁存的测量反馈位置C(MPOS)
handle:         //控制器连接句柄	 
iaxis:          //轴号
pfValue:        //返回的锁存坐标位置 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRegPosC(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取返回锁存的测量反馈位置D(MPOS)
handle:         //控制器连接句柄	 
iaxis:          //轴号
pfValue:        //返回的锁存坐标位置
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRegPosD(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取返回轴当前运动还未完成的距离
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的剩余距离 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRemain(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取轴剩余的缓冲, 按直线段来计算
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的剩余直线缓冲数量	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRemain_LineBuffer(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //读取轴剩余的缓冲, 按最复杂的空间圆弧来计算
handle:         //控制器连接句柄	
iaxis:          //轴号
piValue:        //返回的剩余缓冲数量	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRemain_Buffer(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置当前矢量距离
handle:         //控制器连接句柄
iaxis:          //轴号
fValue:         //设置的当前矢量距离
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetVectorMoved(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取当前矢量距离
handle:         //控制器连接句柄
iaxis:          //轴号
pfValue:        //返回的当前矢量距离	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetVectorMoved(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置根据REP_OPTION设置来自动循环轴DPOS和MPOS坐标
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的循环坐标
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetRepDist(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //设置坐标重复设置
handle:         //控制器连接句柄				
iaxis:          //轴号							
iValue:         //设置的模式，按位来表示不同的意义
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetRepOption(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取坐标重复设置
handle:         //控制器连接句柄	
iaxis:          //轴号
piValue:        //返回的坐标重复设置模式	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRepOption(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //读取根据REP_OPTION设置来自动循环轴DPOS和MPOS坐标
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的循环坐标值	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRepDist(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置负向硬件限位开关对应的输入点编号，-1无效
handle:         //控制器连接句柄				
iaxis:          //轴号							  
iValue:         //设置的负向硬件限位输入口编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetRevIn(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取负向硬件限位开关对应的输入点编号，-1无效
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的负向限位输入口编号	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRevIn(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置负向JOG输入对应的输入点编号，-1无效
handle:         //控制器连接句柄	
iaxis:          //轴号
iValue:         //设置的输入口编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetRevJog(PMC_HANDLE handle, int iaxis, int iValue);

/*************************************************************
Description:    //读取负向JOG输入对应的输入点编号，-1无效
handle:         //控制器连接句柄	
iaxis:          //轴号
piValue:        //返回的输入口编号	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRevJog(PMC_HANDLE handle, int iaxis, int *piValue);

/*************************************************************
Description:    //设置负向软限位位置。设置一个较大的值时认为取消限位
handle:         //控制器连接句柄
iaxis:          //轴号	
fValue:         //设置的负向软限位值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetRsLimit(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取负向软限位位置
handle:         //控制器连接句柄
iaxis:          //轴号	
pfValue:        //返回的负向软限位值	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetRsLimit(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置轴速度，单位为units/s，当多轴运动时，作为插补运动的速度
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的速度值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetSpeed(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取轴速度，单位为units/s，当多轴运动时，作为插补运动的速度
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的速度值		 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetSpeed(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置S曲线设置。0-梯形加减速
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的S曲线平滑时间，ms
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetSramp(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取S曲线设置
handle:         //控制器连接句柄
iaxis:          //轴号
pfValue:        //返回的S曲线平滑时间，ms	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetSramp(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置自定义速度的SP运动的起始速度
handle:         //控制器连接句柄	 
iaxis:          //轴号
fValue:         //设置的起始速度值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetStartMoveSpeed(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取自定义速度的SP运动的起始速度
handle:         //控制器连接句柄
iaxis:          //轴号	
pfValue:        //返回的SP运动起始速度值	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetStartMoveSpeed(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置减速到最低的最小拐角 弧度制
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的角度值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetStopAngle(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取减速到最低的最小拐角 弧度制
handle:         //控制器连接句柄
iaxis:          //轴号
pfValue:        //返回的拐角停止角度	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetStopAngle(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置脉冲当量
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的脉冲当量
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetUnits(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取脉冲当量
handle:         //控制器连接句柄	
iaxis:          //轴号	
pfValue:        //返回的脉冲当量	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetUnits(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取返回轴当前当前运动和缓冲运动还未完成的距离
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的剩余距离	 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetVectorBuffered(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取轴的矢量长度（PMC_SetVectorMoved函数清零轴的矢量长度后开始计算轴的矢量长度），如是多轴插补（iaxis为插补轴的第一个轴）则读取多轴的矢量长度之和
handle:         //控制器连接句柄
iaxis:          //轴号
pfValue:        //返回的当前轴矢量长度	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetVectorTotal(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //读取当前轴运行的命令速度
handle:         //控制器连接句柄				
iaxis:          //轴号								
pfValue:        //返回的控制器发送的轴实时速度		
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetVpSpeed(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //全局变量读取, 也可以是参数等等
handle:         //控制器连接句柄	
pname:          //全局变量名称/或者指定轴号的轴参数名称DPOS(0)
pfValue:        //返回的变量或参数值
pValueNum:      //返回的pfValue有效的个数
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetVariablef(PMC_HANDLE handle, const char *pname, float *pfValue, int32 *pValueNum);

/*************************************************************
Description:    //全局变量读取, 也可以是参数等等
handle:         //控制器连接句柄								
pname:          //全局变量名称/或者指定轴号的轴参数名称DPOS(0)	 
maxValue:       //传入piValue的个数							 
piValue:        //返回的全局变量或轴的值						 
pValueNum:      //返回的piValue有效的个数						 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetVariableInt(PMC_HANDLE handle, const char *pname, int maxValue, int *piValue, int32 *pValueNum);

/*************************************************************
Description:    //BASE指令调用，仅仅修改在线命令的BASE列表，不对控制器的运行任务的BASE进行修改，修改后，后续的所有MOVE等指令都是以这个BASE为基础  
handle:         //控制器连接句柄	
imaxaxises:     //参与轴数			 
piAxislist:     //轴列表数组
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Base(PMC_HANDLE handle, int imaxaxises, const int *piAxislist);

/*************************************************************
Description:    //定义DPOS,不建议使用，可以直接调用SETDPOS达到同样效果
handle:         //控制器连接句柄	
iaxis:          //轴号	
pfDpos:         //设置的坐标值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Defpos(PMC_HANDLE handle, int iaxis, float pfDpos);

/*************************************************************
Description:    //多轴相对直线插补
handle:         //控制器连接句柄	
imaxaxises:     //参与运动总轴数			
piAxislist:     //轴列表数组			
pfDisancelist:  //运动的距离列表
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Move(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, const float *pfDisancelist);

/*************************************************************
Description:    //相对多轴直线插补SP运动 
handle:         //控制器连接句柄	
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
pfDisancelist:  //运动的距离列表
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, const float *pfDisancelist);

/*************************************************************
Description:    //绝对多轴直线插补
handle:         //控制器连接句柄	
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
pfDisancelist:  //运动的距离列表
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveAbs(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, const float *pfDisancelist);

/*************************************************************
Description:    //绝对多轴直线插补SP运动
handle:         //控制器连接句柄	
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
pfDisancelist:  //运动的距离列表
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveAbsSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, const float *pfDisancelist);

/*************************************************************
Description:    //运动中修改结束位置
handle:         //控制器连接句柄	
imaxaxises:     //轴数量					
pfDisancelist:  //运动的距离列表
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveModify(PMC_HANDLE handle, int imaxaxises, const float *pfDisancelist);

/*************************************************************
Description:    //相对圆心定圆弧插补运动 
handle:         //控制器连接句柄
imaxaxises:     //参与运动总轴数					
piAxislist:     //轴列表数组						
fend1:          //第一个轴运动坐标					              
fend2:          //第二个轴运动坐标					              
fcenter1:       //第一个轴运动圆心，相对与起始点	    
fcenter2:       //第二个轴运动圆心，相对与起始点	    
idirection:     //0-逆时针，1-顺时针
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCirc(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection);

/*************************************************************
Description:    //相对圆心定圆弧插补运动 插补SP运动
handle:         //控制器连接句柄
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组						
fend1:          //第一个轴运动坐标					              
fend2:          //第二个轴运动坐标					              
fcenter1:       //第一个轴运动圆心，相对与起始点	    
fcenter2:       //第二个轴运动圆心，相对与起始点    
idirection:     //0-逆时针，1-顺时针
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCircSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection);

/*************************************************************
Description:    //绝对圆心圆弧插补运动 无法画整圆
handle:         //控制器连接句柄
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组						
fend1:          //第一个轴运动坐标					              
fend2:          //第二个轴运动坐标					              
fcenter1:       //第一个轴运动圆心，绝对位置	    
fcenter2:       //第二个轴运动圆心，绝对位置        
idirection:     //0-逆时针，1-顺时针
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCircAbs(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection);

/*************************************************************
Description:    //绝对圆心圆弧插补SP运动 无法画整圆
handle:         //控制器连接句柄
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组						
fend1:          //第一个轴运动坐标					              
fend2:          //第二个轴运动坐标					              
fcenter1:       //第一个轴运动圆心，绝对位置	    
fcenter2:       //第二个轴运动圆心，绝对位置        
idirection:     //0-逆时针，1-顺时针
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCircAbsSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection);

/*************************************************************
Description:    //相对3点定圆弧插补运动 
handle:         //控制器连接句柄
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组						
fmid1:          //第一个轴中间点，相对起始点距离	       
fmid2:          //第二个轴中间点，相对起始点距离	       
fend1:          //第一个轴结束点，相对起始点距离	              
fend2:          //第二个轴结束点，相对起始点距离
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCirc2(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fmid1, float fmid2, float fend1, float fend2);

/*************************************************************
Description:    //绝对3点定圆弧插补运动 
handle:         //控制器连接句柄
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组						
fmid1:          //第一个轴中间点，绝对位置	       
fmid2:          //第二个轴中间点，绝对位置	       
fend1:          //第一个轴结束点，绝对位置	              
fend2:          //第二个轴结束点，绝对位置
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCirc2Abs(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fmid1, float fmid2, float fend1, float fend2);

/*************************************************************
Description:    //相对3点定圆弧插补SP运动
handle:         //控制器连接句柄
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组						
fmid1:          //第一个轴中间点，相对起始点距离	       
fmid2:          //第二个轴中间点，相对起始点距离	       
fend1:          //第一个轴结束点，相对起始点距离	              
fend2:          //第二个轴结束点，相对起始点距离
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCirc2Sp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fmid1, float fmid2, float fend1, float fend2);

/*************************************************************
Description:    //绝对3点定圆弧插补SP运动 
handle:         //控制器连接句柄
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组						
fmid1:          //第一个轴中间点，绝对位置	       
fmid2:          //第二个轴中间点，绝对位置	       
fend1:          //第一个轴结束点，绝对位置	              
fend2:          //第二个轴结束点，绝对位置
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCirc2AbsSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fmid1, float fmid2, float fend1, float fend2);

/*************************************************************
Description:    //相对半径方向定圆弧插补
handle:         //控制器连接句柄									
imaxaxises:     //参与运动总轴数										
piAxislist:     //轴列表数组												
fend1:          //第一个轴结束点，相对位置							        
fend2:          //第二个轴结束点，相对位置							         
fradius:        //圆弧半径，单位是UNITS。radius >0 优弧  <0 劣弧	     
idirection:     //圆弧运动方向。0为逆时针方向，1为顺时针方向
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCirc3(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fradius, int idirection);

/*************************************************************
Description:    //绝对半径方向定圆弧插补
handle:         //控制器连接句柄									
imaxaxises:     //参与运动总轴数										
piAxislist:     //轴列表数组												
fend1:          //第一个轴结束点，绝对位置							        
fend2:          //第二个轴结束点，绝对位置							         
fradius:        //圆弧半径，单位是UNITS。radius >0 优弧  <0 劣弧	     
idirection:     //圆弧运动方向。0为逆时针方向，1为顺时针方向
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCirc3Abs(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fradius, int idirection);

/*************************************************************
Description:    //相对半径方向定圆弧插补SP运动 
handle:         //控制器连接句柄									
imaxaxises:     //参与运动总轴数										
piAxislist:     //轴列表数组												
fend1:          //第一个轴结束点，相对位置							        
fend2:          //第二个轴结束点，相对位置							         
fradius:        //圆弧半径，单位是UNITS。radius >0 优弧  <0 劣弧	     
idirection:     //圆弧运动方向。0为逆时针方向，1为顺时针方向
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCirc3Sp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fradius, int idirection);

/*************************************************************
Description:    //绝对半径方向定圆弧插补SP运动 
handle:         //控制器连接句柄									
imaxaxises:     //参与运动总轴数										
piAxislist:     //轴列表数组												
fend1:          //第一个轴结束点，绝对位置							        
fend2:          //第二个轴结束点，绝对位置							         
fradius:        //圆弧半径，单位是UNITS。radius >0 优弧  <0 劣弧	     
idirection:     //圆弧运动方向。0为逆时针方向，1为顺时针方向
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveCirc3AbsSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fradius, int idirection);

/*************************************************************
Description:    //相对3轴圆心螺旋插补运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fend1:          //第一个轴运动坐标													              
fend2:          //第二个轴运动坐标													              
fcenter1:       //第一个轴运动圆心，相对与起始点									    
fcenter2:       //第二个轴运动圆心，相对与起始点									    		
idirection:     //0-逆时针，1-顺时针												  
fDistance3:     //第三个轴运动距离													
imode:          //第三轴的速度计算:0(缺省)第三轴参与速度计算。1第三轴不参与速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MHelical(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fDistance3, int imode);

/*************************************************************
Description:    //绝对3轴圆心螺旋插补运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fend1:          //第一个轴运动坐标													              
fend2:          //第二个轴运动坐标													              
fcenter1:       //第一个轴运动圆心，绝对坐标									    
fcenter2:       //第二个轴运动圆心，绝对坐标									    		
idirection:     //0-逆时针，1-顺时针												  
fDistance3:     //第三个轴运动距离													
imode:          //第三轴的速度计算:0(缺省)第三轴参与速度计算。1第三轴不参与速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MHelicalAbs(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fDistance3, int imode);

/*************************************************************
Description:    //相对3轴圆心螺旋插补SP运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fend1:          //第一个轴运动坐标													              
fend2:          //第二个轴运动坐标													              
fcenter1:       //第一个轴运动圆心，相对与起始点									    
fcenter2:       //第二个轴运动圆心，相对与起始点									    		
idirection:     //0-逆时针，1-顺时针												  
fDistance3:     //第三个轴运动距离													
imode:          //第三轴的速度计算:0(缺省)第三轴参与速度计算。1第三轴不参与速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MHelicalSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fDistance3, int imode);

/*************************************************************
Description:    //绝对3轴圆心螺旋插补SP运动
handle:         //控制器连接句柄
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
fend1:          //第一个轴运动坐标
fend2:          //第二个轴运动坐标
fcenter1:       //第一个轴运动圆心，绝对坐标
fcenter2:       //第二个轴运动圆心，绝对坐标		    		
idirection:     //0-逆时针，1-顺时针
fDistance3:     //第三个轴运动距离
imode:          //第三轴的速度计算:0(缺省)第三轴参与速度计算。1第三轴不参与速度计算
 Return:        //错误码
*************************************************************/
int32 __stdcall PMC_MHelicalAbsSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fDistance3, int imode);

/*************************************************************
Description:    //相对3轴 3点画螺旋插补运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fmid1:          //第一个轴中间点坐标，相对起始点									         
fmid2:          //第二个轴中间点坐标，相对起始点									       	
fend1:          //第一个轴结束点坐标，相对起始点									              	  
fend2:          //第二个轴结束点坐标，相对起始点									              		
fDistance3:     //第三个轴运动距离															  
imode:          //第三轴的速度计算:0(缺省)第三轴参与速度计算。1第三轴不参与速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MHelical2(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fmid1, float fmid2, float fend1, float fend2, float fDistance3, int imode);

/*************************************************************
Description:    //绝对3轴 3点画螺旋插补运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fmid1:          //第一个轴中间点坐标，绝对坐标									         
fmid2:          //第二个轴中间点坐标，绝对坐标									       	
fend1:          //第一个轴结束点坐标，绝对坐标									              	  
fend2:          //第二个轴结束点坐标，绝对坐标									              		
fDistance3:     //第三个轴运动距离															  
imode:          //第三轴的速度计算:0(缺省)第三轴参与速度计算。1第三轴不参与速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MHelical2Abs(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fmid1, float fmid2, float fend1, float fend2, float fDistance3, int imode);

/*************************************************************
Description:    //相对3轴 3点画螺旋插补SP运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fmid1:          //第一个轴中间点坐标，相对起始点									         
fmid2:          //第二个轴中间点坐标，相对起始点									       	
fend1:          //第一个轴结束点坐标，相对起始点									              	  
fend2:          //第二个轴结束点坐标，相对起始点									              		
fDistance3:     //第三个轴运动距离															  
imode:          //第三轴的速度计算:0(缺省)第三轴参与速度计算。1第三轴不参与速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MHelical2Sp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fmid1, float fmid2, float fend1, float fend2, float fDistance3, int imode);

/*************************************************************
Description:    //绝对3轴 3点画螺旋插补SP运动 
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fmid1:          //第一个轴中间点坐标，绝对坐标									         
fmid2:          //第二个轴中间点坐标，绝对坐标									       	
fend1:          //第一个轴结束点坐标，绝对坐标									              	  
fend2:          //第二个轴结束点坐标，绝对坐标									              		
fDistance3:     //第三个轴运动距离															  
imode:          //第三轴的速度计算:0(缺省)第三轴参与速度计算。1第三轴不参与速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MHelical2AbsSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fmid1, float fmid2, float fend1, float fend2, float fDistance3, int imode);

/*************************************************************
Description:    //相对椭圆插补
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数																
piAxislist:     //轴列表数组																		
fend1:          //终点第一个轴运动坐标，相对于起始点								              
fend2:          //终点第二个轴运动坐标，相对于起始点								              
fcenter1:       //中心第一个轴运动坐标，相对于起始点								    
fcenter2:       //中心第二个轴运动坐标，相对于起始点								    
idirection:     //0-逆时针，1-顺时针												  
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可							         
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MEclipse(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis);

/*************************************************************
Description:    //绝对椭圆插补
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数																
piAxislist:     //轴列表数组																		
fend1:          //终点第一个轴运动坐标，绝对坐标								              
fend2:          //终点第二个轴运动坐标，绝对坐标								              
fcenter1:       //中心第一个轴运动坐标，绝对坐标								    
fcenter2:       //中心第二个轴运动坐标，绝对坐标								    
idirection:     //0-逆时针，1-顺时针												  
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可							         
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MEclipseAbs(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis);

/*************************************************************
Description:    //相对椭圆插补SP运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数																
piAxislist:     //轴列表数组																		
fend1:          //终点第一个轴运动坐标，相对于起始点								              
fend2:          //终点第二个轴运动坐标，相对于起始点								              
fcenter1:       //中心第一个轴运动坐标，相对于起始点								    
fcenter2:       //中心第二个轴运动坐标，相对于起始点								    
idirection:     //0-逆时针，1-顺时针												  
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可							         
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MEclipseSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis);

/*************************************************************
Description:    //绝对椭圆插补SP运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数																
piAxislist:     //轴列表数组																		
fend1:          //终点第一个轴运动坐标，绝对坐标								              
fend2:          //终点第二个轴运动坐标，绝对坐标								              
fcenter1:       //中心第一个轴运动坐标，绝对坐标								    
fcenter2:       //中心第二个轴运动坐标，绝对坐标								    
idirection:     //0-逆时针，1-顺时针												  
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可							         
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MEclipseAbsSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis);

/*************************************************************
Description:    //相对椭圆 + 螺旋插补运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fend1:          //终点第一个轴运动坐标，相对于起始点								              
fend2:          //终点第二个轴运动坐标，相对于起始点								              
fcenter1:       //中心第一个轴运动坐标，相对于起始点								    
fcenter2:       //中心第二个轴运动坐标，相对于起始点								    
idirection:     //0-逆时针，1-顺时针												  
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可							         
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋	        
fDistance3:     //第三个轴的运动距离
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MEclipseHelical(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fDistance3);

/*************************************************************
Description:    //绝对椭圆 + 螺旋插补运动
handle:         //控制器连接句柄
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
fend1:          //终点第一个轴运动坐标，绝对坐标
fend2:          //终点第二个轴运动坐标，绝对坐标
fcenter1:       //中心第一个轴运动坐标，绝对坐标
fcenter2:       //中心第二个轴运动坐标，绝对坐标
idirection:     //0-逆时针，1-顺时针
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋
fDistance3:     //第三个轴的运动距离
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MEclipseHelicalAbs(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis,float fDistance3);

/*************************************************************
Description:    //相对椭圆 + 螺旋插补SP运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fend1:          //终点第一个轴运动坐标，相对于起始点								              
fend2:          //终点第二个轴运动坐标，相对于起始点								              
fcenter1:       //中心第一个轴运动坐标，相对于起始点								    
fcenter2:       //中心第二个轴运动坐标，相对于起始点								    
idirection:     //0-逆时针，1-顺时针												  
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可							         
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋	        
fDistance3:     //第三个轴的运动距离
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MEclipseHelicalSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fDistance3);

/*************************************************************
Description:    //绝对椭圆 + 螺旋插补SP运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fend1:          //终点第一个轴运动坐标，绝对坐标
fend2:          //终点第二个轴运动坐标，绝对坐标
fcenter1:       //中心第一个轴运动坐标，绝对坐标
fcenter2:       //中心第二个轴运动坐标，绝对坐标
idirection:     //0-逆时针，1-顺时针
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋
fDistance3:     //第三个轴的运动距离
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MEclipseHelicalAbsSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis,float fDistance3);

/*************************************************************
Description:    //相对椭圆 + 螺旋多圈插补
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fcenter1:       //中心第一个轴运动坐标												    
fcenter2:       //中心第二个轴运动坐标												    
idirection:     //0-逆时针，1-顺时针												  
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可							         
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋 
fCircles:       //正数 - 逆时针，负数 - 顺时针，不能为0，圈数可以为小数	    
fDistance3:     //第三个轴的运动距离										
imode:          //第三轴的速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Tangle(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fCircles, float fDistance3, int imode);

/*************************************************************
Description:    //相对椭圆 + 螺旋多圈插补SP运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fcenter1:       //中心第一个轴运动坐标												    
fcenter2:       //中心第二个轴运动坐标												    
idirection:     //0-逆时针，1-顺时针												  
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可							         
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋 
fCircles:       //正数 - 逆时针，负数 - 顺时针，不能为0，圈数可以为小数	    
fDistance3:     //第三个轴的运动距离										
imode:          //第三轴的速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_TangleSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fCircles, float fDistance3, int imode);

/*************************************************************
Description:    //绝对椭圆 + 螺旋多圈插补
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fcenter1:       //中心第一个轴运动绝对坐标												    
fcenter2:       //中心第二个轴运动绝对坐标												    
idirection:     //0-逆时针，1-顺时针												  
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可							         
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋 
fCircles:       //正数 - 逆时针，负数 - 顺时针，不能为0，圈数可以为小数	    
fDistance3:     //第三个轴的运动距离										
imode:          //第三轴的速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_TangleAbs(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fCircles, float fDistance3, int imode);

/*************************************************************
Description:    //绝对椭圆 + 螺旋多圈插补SP运动
handle:         //控制器连接句柄													
imaxaxises:     //参与运动总轴数													
piAxislist:     //轴列表数组														
fcenter1:       //中心第一个轴运动绝对坐标												    
fcenter2:       //中心第二个轴运动绝对坐标												    
idirection:     //0-逆时针，1-顺时针												  
fADis:          //第一轴的椭圆半径，半长轴或者半短轴都可							         
fBDis:          //第二轴的椭圆半径，半长轴或者半短轴都可，AB相等时自动为圆弧或螺旋 
fCircles:       //正数 - 逆时针，负数 - 顺时针，不能为0，圈数可以为小数	    
fDistance3:     //第三个轴的运动距离										
imode:          //第三轴的速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_TangleAbsSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fcenter1, float fcenter2, int idirection, float fADis, float fBDis, float fCircles, float fDistance3, int imode);

/*************************************************************
Description:    //空间圆弧 + 螺旋插补运动
handle:         //控制器连接句柄																
imaxaxises:     //参与运动总轴数																
piAxislist:     //轴列表数组																	
fend1:          //第1个轴运动距离参数1，相对与起点												              
fend2:          //第2个轴运动距离参数1，相对与起点												                
fend3:          //第3个轴运动距离参数1，相对与起点												              
fcenter1:       //第1个轴运动距离参数2，相对与起点												    
fcenter2:       //第2个轴运动距离参数2，相对与起点												    
fcenter3:       //第3个轴运动距离参数2，相对与起点												    
imode:          //指定前面参数的意义															      
				  0 当前点，中间点，终点三点定圆弧，距离参数1为终点距离，距离参数2为中间点距离
				  1 走最小的圆弧，距离参数1为终点距离，距离参数2为圆心的距离
				  2 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离
				  3 先走最小的圆弧，再继续走完整圆，距离参数1为终点距离，距离参数2为圆心的距离
fcenter4:       //第4个轴运动距离参数																 
fcenter5:       //第5个轴运动距离参数
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MSpherical(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, int imode, float fcenter4, float fcenter5);

/*************************************************************
Description:    //空间圆弧 + 螺旋插补运动2
handle:         //控制器连接句柄																
imaxaxises:     //参与运动总轴数																
piAxislist:     //轴列表数组																	
fend1:          //第1个轴运动距离参数1，相对与起点												              
fend2:          //第2个轴运动距离参数1，相对与起点												                
fend3:          //第3个轴运动距离参数1，相对与起点												              
fcenter1:       //第1个轴运动距离参数2，相对与起点												    
fcenter2:       //第2个轴运动距离参数2，相对与起点												    
fcenter3:       //第3个轴运动距离参数2，相对与起点												    
imode:          //指定前面参数的意义															      
				  0 当前点，中间点，终点三点定圆弧，距离参数1为终点距离，距离参数2为中间点距离
				  1 走最小的圆弧，距离参数1为终点距离，距离参数2为圆心的距离
				  2 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离
				  3 先走最小的圆弧，再继续走完整圆，距离参数1为终点距离，距离参数2为圆心的距离
fcenter:        //第4-imaxaxises个轴运动距离参数
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MSpherical2(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, int imode, const float *fcenter);

/*************************************************************
Description:    //空间圆弧 + 螺旋 插补SP运动
handle:         //控制器连接句柄																
imaxaxises:     //参与运动总轴数																
piAxislist:     //轴列表数组																	
fend1:          //第1个轴运动距离参数1，相对与起点												              
fend2:          //第2个轴运动距离参数1，相对与起点												                
fend3:          //第3个轴运动距离参数1，相对与起点												              
fcenter1:       //第1个轴运动距离参数2，相对与起点												    
fcenter2:       //第2个轴运动距离参数2，相对与起点												    
fcenter3:       //第3个轴运动距离参数2，相对与起点												    
imode:          //指定前面参数的意义															      
				  0 当前点，中间点，终点三点定圆弧，距离参数1为终点距离，距离参数2为中间点距离
				  1 走最小的圆弧，距离参数1为终点距离，距离参数2为圆心的距离
				  2 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离
				  3 先走最小的圆弧，再继续走完整圆，距离参数1为终点距离，距离参数2为圆心的距离
fcenter4:       //第4个轴运动距离参数																 
fcenter5:       //第5个轴运动距离参数
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MSphericalSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, int imode, float fcenter4, float fcenter5);

/*************************************************************
Description:    //空间圆弧 + 螺旋插补SP运动2
handle:         //控制器连接句柄																
imaxaxises:     //参与运动总轴数																
piAxislist:     //轴列表数组																	
fend1:          //第1个轴运动距离参数1，相对与起点												              
fend2:          //第2个轴运动距离参数1，相对与起点												                
fend3:          //第3个轴运动距离参数1，相对与起点												              
fcenter1:       //第1个轴运动距离参数2，相对与起点												    
fcenter2:       //第2个轴运动距离参数2，相对与起点												    
fcenter3:       //第3个轴运动距离参数2，相对与起点												    
imode:          //指定前面参数的意义															      
				  0 当前点，中间点，终点三点定圆弧，距离参数1为终点距离，距离参数2为中间点距离
				  1 走最小的圆弧，距离参数1为终点距离，距离参数2为圆心的距离
				  2 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离
				  3 先走最小的圆弧，再继续走完整圆，距离参数1为终点距离，距离参数2为圆心的距离
fcenter:        //第4-imaxaxises个轴运动距离参数
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MSpherical2Sp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, int imode, const float *fcenter);

/*************************************************************
Description:    //绝对空间圆弧多圈
handle:         //控制器连接句柄																				
imaxaxises:     //参与运动总轴数																				
piAxislist:     //轴列表数组																					
fend1:          //第1个轴运动距离参数1，绝对位置																              
fend2:          //第2个轴运动距离参数1，绝对位置 																              
fend3:          //第3个轴运动距离参数1，绝对位置																              
fcenter1:       //第1个轴运动距离参数2，绝对位置																    
fcenter2:       //第2个轴运动距离参数2，绝对位置																    
fcenter3:       //第3个轴运动距离参数2，绝对位置																	    
fRange:         //螺旋圈数，支持小数圈数																		     
imode:          //指定前面参数的意义																			      
				  0 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离。
				  1 当前点，圆心，终点定圆弧。走最短的圆弧。距离参数1为终点距离，距离参数2为圆心的距离
fDistance4:     //空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MSpaceHerical(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, float fRange, int imode, float fDistance4);

/*************************************************************
Description:    //绝对空间圆弧多圈SP运动
handle:         //控制器连接句柄
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
fend1:          //第1个轴运动距离参数1，绝对位置
fend2:          //第2个轴运动距离参数1，绝对位置
fend3:          //第3个轴运动距离参数1，绝对位置
fcenter1:       //第1个轴运动距离参数2，绝对位置
fcenter2:       //第2个轴运动距离参数2，绝对位置
fcenter3:       //第3个轴运动距离参数2，绝对位置
fRange:         //螺旋圈数，支持小数圈数
imode:          //指定前面参数的意义
				  0 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离。
				  1 当前点，圆心，终点定圆弧。走最短的圆弧。距离参数1为终点距离，距离参数2为圆心的距离
fDistance4:     //空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MSpaceHericalSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, float fRange, int imode, float fDistance4);

/*************************************************************
Description:    //绝对空间圆弧多圈双段
handle:         //控制器连接句柄	
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
fend1:          //第1个轴运动距离参数1，绝对位置
fend2:          //第2个轴运动距离参数1，绝对位置 
fend3:          //第3个轴运动距离参数1，绝对位置
fcenter1:       //第1个轴运动距离参数2，绝对位置
fcenter2:       //第2个轴运动距离参数2，绝对位置
fcenter3:       //第3个轴运动距离参数2，绝对位置
fRange:         //第一段螺旋圈数，支持小数圈数
fRange2:        //第二段螺旋圈数，支持小数圈数
imode:          //指定前面参数的意义
				  0 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离。
				  1 当前点，圆心，终点定圆弧。走最短的圆弧。距离参数1为终点距离，距离参数2为圆心的距离
fDistance4:     //第一段空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
fDistance5:     //第二段空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MSpaceHerical2(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, float fRange, float fRange2, int imode, float fDistance4, float fDistance5);

/*************************************************************
Description:    //绝对空间圆弧多圈双段SP运动
handle:         //控制器连接句柄	
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
fend1:          //第1个轴运动距离参数1，绝对位置
fend2:          //第2个轴运动距离参数1，绝对位置 
fend3:          //第3个轴运动距离参数1，绝对位置
fcenter1:       //第1个轴运动距离参数2，绝对位置
fcenter2:       //第2个轴运动距离参数2，绝对位置
fcenter3:       //第3个轴运动距离参数2，绝对位置
fRange:         //第一段螺旋圈数，支持小数圈数
fRange2:        //第二段螺旋圈数，支持小数圈数
imode:          //指定前面参数的意义
				  0 当前点，中间点，终点三点定圆，距离参数1为终点距离，距离参数2为中间点距离。
				  1 当前点，圆心，终点定圆弧。走最短的圆弧。距离参数1为终点距离，距离参数2为圆心的距离
fDistance4:     //第一段空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
fDistance5:     //第二段空间圆弧法向距离，相对位置，法向方向使用右手定则，>0 大拇指方向即为正向，=0 距离为0，<0反向
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MSpaceHerical2Sp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float fend1, float fend2, float fend3, float fcenter1, float fcenter2, float fcenter3, float fRange, float fRange2, int imode, float fDistance4, float fDistance5);

/*************************************************************
Description:    //渐开线圆弧插补运动，相对移动方式，当起始半径0直接扩散时从0角度开始
handle:         //控制器连接句柄	
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
center1:        //第1轴圆心的相对距离
center2:        //第2轴圆心的相对距离
circles:        //要旋转的圈数，可以为小数圈，负数表示顺时针
pitch:          //每圈的扩散距离，可以为负
distance3:      //第3轴螺旋的功能，指定第3轴的相对距离，此轴不参与速度计算
distance4:      //第4轴螺旋的功能，指定第4轴的相对距离，此轴不参与速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveSpiral(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float center1, float center2, float circles, float pitch, float distance3, float distance4);

/*************************************************************
Description:    //渐开线圆弧插补SP运动，相对移动方式，当起始半径0直接扩散时从0角度开始
handle:         //控制器连接句柄	
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
center1:        //第1轴圆心的相对距离
center2:        //第2轴圆心的相对距离
circles:        //要旋转的圈数，可以为小数圈，负数表示顺时针
pitch:          //每圈的扩散距离，可以为负
distance3:      //第3轴螺旋的功能，指定第3轴的相对距离，此轴不参与速度计算
distance4:      //第4轴螺旋的功能，指定第4轴的相对距离，此轴不参与速度计算
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveSpiralSp(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float center1, float center2, float circles, float pitch, float distance3, float distance4);

/*************************************************************
Description:    //运动暂停，插补运动暂停主轴。轴列表轴第一个轴
handle:         //控制器连接句柄
iaxis:			//轴号 
imode:			//暂停模式 	
				  0（缺省） 暂停当前运动。 
				  1 在当前运动完成后正准备执行下一条运动指令时暂停。 
				  2 在当前运动完成后正准备执行下一条运动指令时，并且两条指令的MARK标识不一样时暂停。这个模式可以用于一个动作由多个指令来实现时，可以在一整个动作完成后暂停。 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MovePause(PMC_HANDLE handle, int iaxis, int imode);

/*************************************************************
Description:    //取消运动暂停
handle:         //控制器连接句柄	
iaxis:          //轴号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveResume(PMC_HANDLE handle, int iaxis);

/*************************************************************
Description:    //在当前的运动末尾位置增加速度限制，用于强制拐角减速
handle:         //控制器连接句柄	
iaxis:          //轴号
limitspeed:     //设置的速度限制值
 Return:        //错误码
*************************************************************/
int32 __stdcall PMC_MoveLimit(PMC_HANDLE handle, int iaxis, float limitspeed);

/*************************************************************
Description:    //在运动缓冲中加入输出指令
handle:         //控制器连接句柄	
iaxis:          //轴号 
ioutnum:        //输出口编号 
ivalue:         //输出口状态
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveOp(PMC_HANDLE handle, int iaxis, int ioutnum, int ivalue);

/*************************************************************
Description:    //在运动缓冲中加入连续输出口输出指令
handle:         //控制器连接句柄	
iaxis:          //轴号  
ioutnumfirst:   //输出口起始编号 
ioutnumend:     //输出口结束编号 
ivalue:         //对应输出口状态二进制组合值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveOpMulti(PMC_HANDLE handle, int iaxis, int ioutnumfirst, int ioutnumend, int ivalue);

/*************************************************************
Description:    //在运动缓冲中加入输出指令 ,指定时间后输出状态翻转
handle:         //控制器连接句柄	
iaxis:          //轴号  
ioutnum:        //输出口编号 
ivalue:         //输出口状态	
iofftimems:     //状态反转时间，ms
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveOp2(PMC_HANDLE handle, int iaxis, int ioutnum, int ivalue, int iofftimems);

/*************************************************************
Description:    //在运动缓冲中加入AOUT输出指令
handle:         //控制器连接句柄	
iaxis:          //轴号 
ioutnum:        //AOUT编号 
fvalue:         //输出的模拟量值
				  12位刻度值范围 0~4095 对应 0~10V 电压
				  16位刻度值范围 0~65535 对应 0~10V 电压
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveAout(PMC_HANDLE handle, int iaxis, int ioutnum, float fvalue);

/*************************************************************
Description:    //在运动缓冲中加入延时指令
handle:         //控制器连接句柄	
iaxis:          //轴号 
itimems:        //延时时间，毫秒
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveDelay(PMC_HANDLE handle, int iaxis, int itimems);

/*************************************************************
Description:    //运动缓冲中插入同步其他轴的运动
handle:         //控制器连接句柄	
base_axis:      //插补主轴轴号 
iaxis:          //同步轴号 
fdist:          //同步运动的距离 
ifsp:           //是否使用SP运动0/1, 缺省不使用
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveSynmove(PMC_HANDLE handle, int base_axis, int iaxis, float fdist, int ifsp);

/*************************************************************
Description:    //运动缓冲中插入触发其他轴的运动
handle:         //控制器连接句柄	
base_axis:      //插补主轴轴号 
iaxis:          //触发轴号 
fdist:          //触发运动的距离 
ifsp:           //是否使用SP运动0/1, 缺省不使用
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveASynmove(PMC_HANDLE handle, int base_axis, int iaxis, float fdist, int ifsp);

/*************************************************************
Description:    //电子凸轮 同步运动
handle:         //控制器连接句柄	
iaxis:          //轴号 
istartpoint:    //起始点TABLE编号
iendpoint:      //结束点TABLE编号
ftablemulti:    //位置比例，一般设为脉冲当量值
fDistance:      //参考运动的距离，用来计算总运动时间
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Cam(PMC_HANDLE handle, int iaxis, int istartpoint, int iendpoint, float ftablemulti, float fDistance);

/*************************************************************
Description:    //电子凸轮 同步运动
handle:         //控制器连接句柄	
iaxis:          //轴号 
istartpoint:    //起始点TABLE编号
iendpoint:      //结束点TABLE编号
ftablemulti:    //位置比例，一般设为脉冲当量值
fDistance:      //参考运动的距离
ilinkaxis:      //参考主轴
ioption:        //与参考轴的连接方式，不同的二进制位代表不同的意义
				  Bit 0，当参考轴锁存信号（Regist）事件触发时，当前轴与参考轴开始进行连接运动。 
				  Bit 1，当参考轴运动到设定的绝对位置时，当前轴与参考轴开始连接运动。 
				  Bit 2，自动重复连续双向运行。(通过设置 REP_OPTION=1，可以取消重复)。 
				  Bit 5，只有参考轴的正向运动才连接。 
				  Bit 8，当参考轴 MARKB 信号事件触发时，当前轴与参考轴开始进行连接运动，锁存轴号为参考轴的轴号，需要最新固件支持
flinkstartpos:  //ioption条件中距离参数，当 ioption 参数 bit 1 置为 1 时，该参数表示连接开始启动的绝对位置
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Cambox(PMC_HANDLE handle, int iaxis, int istartpoint, int iendpoint, float ftablemulti, float fDistance, int ilinkaxis, int ioption, float flinkstartpos);

/*************************************************************
Description:    //特殊凸轮 同步运动
handle:         //控制器连接句柄	
iaxis:          //参与运动的轴号(跟随轴)
fDistance:      //同步过程跟随轴运动距离
fLinkDis:       //同步过程参考轴(主轴)运动绝对距离
fLinkAcc:       //跟随轴加速阶段，参考轴移动的绝对距离
fLinkDec:       //跟随轴减速阶段，参考轴移动的绝对距离
iLinkaxis:      //参考轴的轴号
ioption:        //连接模式选项，不同的二进制位代表不同的意义
				  Bit 0，连接精确开始于参考轴上 regist 事件被触发的时刻。 
				  Bit 1，连接开始于参考轴到达一个绝对位置时。
				  Bit 2，当这位被设置时，MOVELINK 会自动重复执行并且可以反向。 
				  Bit 3，当设置时,采用 S 曲线加减速 
				  Bit 5，只有参考轴为正向运动才连接 
				  Bit 8, 连接精确开始于参考轴上 MARKB 事件被触发的时刻，需要最新固件支持
flinkstartpos:  //连接模式选项中运动距离
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Movelink(PMC_HANDLE handle, int iaxis, float fDistance, float fLinkDis, float fLinkAcc, float fLinkDec, int iLinkaxis, int ioption, float flinkstartpos);

/*************************************************************
Description:    //特殊凸轮 同步运动
handle:         //控制器连接句柄	
iaxis:          //参与运动的轴号(跟随轴)
fDistance:      //同步过程跟随轴运动距离
fLinkDis:       //同步过程参考轴(主轴)运动绝对距离
startsp:        //启动时跟随轴和参考轴的速度比例，units/units单位，负数表示跟随轴负向运动
endsp:          //结束时跟随轴和参考轴的速度比例，units/units单位, 负数表示跟随轴负向运动
iLinkaxis:      //参考轴的轴号
ioption:        //连接模式选项，不同的二进制位代表不同的意义
				  Bit 0，连接精确开始于参考轴上 regist 事件被触发的时刻
				  Bit 1，连接开始于参考轴到达一个绝对位置时。 
				  Bit 2，当这位被设置时，MOVELINK 会自动重复执行并且可以反向
				  Bit 5, 只有参考轴为正向运动才连接 
				  Bit 8，连接精确开始于参考轴上 MARKB 事件被触发的时刻，需要最新固件支持
flinkstartpos:  //连接模式选项中运动距离
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Moveslink(PMC_HANDLE handle, int iaxis, float fDistance, float fLinkDis, float startsp, float endsp, int iLinkaxis, int ioption, float flinkstartpos);

/*************************************************************
Description:    //特殊凸轮 同步运动
handle:         //控制器连接句柄	
iaxis:          //参与运动的轴号(跟随轴)
fBasedist:      //跟随轴匀速移动的相对距离，采用units单位
fExcitedist:    //跟随轴激励移动的相对距离，采用units单位。+值表示增加，-值表示减少，跟随轴运动总距离=fBasedist+fExcitedist
fLinkdist:      //参考轴在连接的整个过程中移动的相对距离，采用units单位
fBasein:        //激励开始前，跟随轴运动距离占fBasedist的百分比
fBaseout:       //激励完成后，跟随轴剩余运动距离占fBasedist的百分比（两者相加不要超过100%，否则fExcitedist无效）
fExciteacc:     //激励过程中，跟随轴加速阶段运动距离占fExcitedist的百分比，fExcitedist为负值时，为减速阶段
fExcitedec:     //激励过程中，跟随轴减速阶段运动距离占fExcitedist的百分比，fExcitedist为负值时，为加速阶段
ilinkaxis:      //参考轴的轴号
ioption:        //与参考轴的连接方式，不同的二进制位代表不同的意义。
fLinkpos:       //当 ioptions 参数BIT1置为1时，该参数表示连接开始启动的绝对位置。
fLinkoffpos:    //当 ioptions 参数BIT4置为1时，该参数表示主轴已经运行完的相对位置
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Flexlink(PMC_HANDLE handle, int iaxis, float fBasedist, float fExcitedist, float fLinkdist, float fBasein, float fBaseout, float fExciteacc, float fExcitedec, int iLinkaxis, int ioption, float fLinkpos, float fLinkoffpos);

/*************************************************************
Description:    //特殊凸轮 皮带同步跟随运动
handle:         //控制器连接句柄	
imode:          //同步模式 -1结束模式  -2强制结束 0-第一个轴跟随 10-第二个轴跟随 20-第三个轴跟随  +angle：皮带与跟随轴的正向旋转角度
synctime:       //同步时间，ms单位，本运动在指定时间内完成，完成时BASE轴跟上皮带且保持速度一致。0表示根据运动轴的速度加速度来估计同步时间
syncposition:   //皮带轴物体被感应到时皮带轴的位置
syncaxis:       //皮带轴轴号
imaxaxises:     //参与同步从轴总数
piAxislist:     //从轴号列表
pfDposlist:     //皮带轴物体被感应到时从轴的绝对坐标位置 同步点
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveSync(PMC_HANDLE handle, float imode, int synctime, float syncposition, int syncaxis, int imaxaxises, const int* piAxislist, const float* pfDposlist);

/*************************************************************
Description:    //连接 同步运动指令 电子齿轮
handle:         //控制器连接句柄	
ratio:          //比率，可正可负，注意是脉冲个数的比例
link_axis:      //连接轴的轴号，手轮时为编码器轴
move_axis:      //随动轴号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Connect(PMC_HANDLE handle, float ratio, int link_axis, int move_axis);

/*************************************************************
Description:    //连接 同步运动指令 电子齿轮 将当前轴的目标位置与link_axis轴的插补矢量长度通过电子齿轮连接
handle:         //控制器连接句柄	
ratio:          //比率，可正可负，注意是脉冲个数的比例
link_axis:      //连接轴的轴号，手轮时为编码器轴
move_axis:      //随动轴号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Connpath(PMC_HANDLE handle, float ratio, int link_axis, int move_axis);

/*************************************************************
Description:    //位置锁存指令
handle:         //控制器连接句柄	
iaxis:          //轴号
imode:          //锁存模式
				  1/101， 当 Z 脉冲上升沿时的绝对位置送到 REG_POS
				  2/102， 当 Z 脉冲下降沿时的绝对位置送到 REG_POS
				  3/103， 当输入信号 R0 上升沿的绝对位置送到 REG_POS
				  4/104， 当输入信号 R0 下降沿的绝对位置送到 REG_POS
				  6，	  输入信号 R0 上升沿时的绝对位置送到 REG_POS Z 信号上升沿时的绝对位置送到 REG_POSB
				  7，	  输入信号 R0 上升沿时的绝对位置送到 REG_POS Z 信号下降沿时的 绝对位置送到 REG_POSB
				  8，     输入信号 R0 下降沿时的绝对位置送到 REG_POS Z 信号上升沿时的绝对位置送到 REG_POSB
				  9，     输入信号 R0 下降沿时的绝对位置送到 REG_POS Z 信号下降沿时的绝对位置送到 REG_POSB
				  10，    输入信号 R0 上升沿时的绝对位置送到 REG_POS ，输入信号 R1 上升沿时的绝对位置送到 REG_POSB
				  11，    输入信号 R0 上升沿时的绝对位置送到 REG_POS ，输入信号 R1 下降沿时的绝对位置送到 REG_POSB
				  12，    输入信号 R0 下降沿时的绝对位置送到 REG_POS ，输入信号 R1 上升沿时的绝对位置送到 REG_POSB
				  13，    输入信号 R0 下降沿时的绝对位置送到 REG_POS ，输入信号 R1 下降沿时的绝对位置送到 REG_POSB
				  14/114，输入信号 R1 上升沿时的绝对位置送到 REG_POSB
				  15/115，输入信号 R1 下降沿时的绝对位置送到 REG_POSB
				  16/116，Z信号上升沿时的绝对位置送到 REG_POSB
				  17/117，Z信号下降沿时的绝对位置送到 REG_POSB
				  23/123，当输入信号R0 上升沿的绝对位置送到REG_POSB
				  24/124，当输入信号R0 下降沿的绝对位置送到REG_POSB
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Regist(PMC_HANDLE handle, int iaxis, int imode);

/*************************************************************
Description:    //编码器输入齿轮比，缺省(1,1)
handle:         //控制器连接句柄	
iaxis:          //轴号 
mpos_count:     //分子，不要超过65535
input_count:    //分母，不要超过65535
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_EncoderRatio(PMC_HANDLE handle, int iaxis, int mpos_count, int input_count);

/*************************************************************
Description:    //设置步进输出齿轮比，缺省(1,1)
handle:         //控制器连接句柄	
iaxis:          //轴号 
mpos_count:     //分子，1-65535
input_count:    //分母，1-65535
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_StepRatio(PMC_HANDLE handle, int iaxis, int mpos_count, int input_count);

/*************************************************************
Description:    //所有轴立即停止
handle:         //控制器连接句柄	 
imode:          //停止模式
				  0 取消当前运动（缺省）。
				  1 取消缓冲的运动。
				  2 取消当前运动和缓冲运动。
				  3 立即中断脉冲发送。
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Rapidstop(PMC_HANDLE handle, int imode);

/*************************************************************
Description:    //多个轴运动停止
handle:         //控制器连接句柄
imaxaxises:     //轴数
piAxislist:     //轴列表数组
imode:          //停止模式
				  0 取消当前运动（缺省）。
				  1 取消缓冲的运动。
				  2 取消当前运动和缓冲运动。
				  3 立即中断脉冲发送。
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_CancelAxisList(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, int imode);

/*************************************************************
Description:    //轴叠加运动，iaddaxis运动叠加到iaxis轴 ，ADDAX指令叠加的是脉冲个数
handle:         //控制器连接句柄	
iaxis:          //被叠加轴
iaddaxis:       //叠加轴
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Single_Addax(PMC_HANDLE handle, int iaxis, int iaddaxis);

/*************************************************************
Description:    //单轴运动停止
handle:         //控制器连接句柄	
iaxis:          //轴号
imode:          //停止模式
				  0 取消当前运动（缺省）。
				  1 取消缓冲的运动。
				  2 取消当前运动和缓冲运动。
				  3 立即中断脉冲发送。
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Single_Cancel(PMC_HANDLE handle, int iaxis, int imode);

/*************************************************************
Description:    //单轴连续运动
handle:         //控制器连接句柄	
iaxis:          //轴号
idir:           //方向 1正向 -1负向
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Single_Vmove(PMC_HANDLE handle, int iaxis, int idir);

/*************************************************************
Description:    //控制器方式回零
handle:         //控制器连接句柄	
iaxis:          //轴号
imode:          //找原点模式
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Single_Datum(PMC_HANDLE handle, int iaxis, int imode);


/*************************************************************
Description:    //单轴相对运动
handle:         //控制器连接句柄	
iaxis:          //轴号 
fdistance:      //相对运动距离
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Single_Move(PMC_HANDLE handle, int iaxis, float fdistance);

/*************************************************************
Description:    //单轴绝对运动
handle:         //控制器连接句柄	
iaxis:          //轴号 
fdistance:      //绝对运动距离
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Single_MoveAbs(PMC_HANDLE handle, int iaxis, float fdistance);

/*********************内存操作*********************/
/*************************************************************
Description:    //写VR
handle:         //控制器连接句柄	 
vrstartnum:     //VR起始编号
numes:          //写入的数量
pfValue:        //写入的数据列表
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetVrf(PMC_HANDLE handle,int vrstartnum, int numes, const float *pfValue);

/*************************************************************
Description:    //VR读取, 可以一次读取多个
handle:         //控制器连接句柄	
vrstartnum:     //读取的VR起始地址
numes:          //读取的数量
pfValue:        //返回的读取值，多个时必须分配空间
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetVrf(PMC_HANDLE handle, int vrstartnum, int numes, float *pfValue);

/*************************************************************
Description:    //VRINT读取
handle:         //控制器连接句柄	
vrstartnum:     //读取的VR起始地址
numes:          //读取的数量
piValue:        //返回的读取值，多个时必须分配空间
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetVrInt(PMC_HANDLE handle, int vrstartnum, int numes, int *piValue);

/*************************************************************
Description:    //写table 
handle:         //控制器连接句柄	 
tabstart:       //写入的TABLE起始编号
numes:          //写入的数量
pfValue:        //写入的数据值	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetTable(PMC_HANDLE handle,int tabstart, int numes, const float *pfValue);

/*************************************************************
Description:    //table读取, 可以一次读取多个
handle:         //控制器连接句柄	
tabstart:       //读取TABLE起始地址
numes:          //读取的数量
pfValue:        //返回的读取值，多个时必须分配空间
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetTable(PMC_HANDLE handle, int tabstart, int numes, float *pfValue);

/*************************************************************
Description:    //把float格式的变量列表存储到文件， 与控制器的U盘文件格式一致
handle:         //控制器连接句柄
sFilename:      //文件绝对路径
pVarlist:		//写入的数据列表
inum			//写入的数据长度
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_WriteUFile(PMC_HANDLE handle, const char *sFilename, const float *pVarlist, int inum);

/*************************************************************
Description:    //读取float格式的变量列表， 与控制器的U盘文件格式一致
handle:         //控制器连接句柄
sFilename:      //文件绝对路径
pVarlist:       //返回的数据列表				
pinum:          //返回的数据长度		
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_ReadUFile(PMC_HANDLE handle, const char *sFilename, float *pVarlist, int *pinum);

/*************************************************************
Description:    //modbus寄存器操作 modbus_bit设置
handle:         //控制器连接句柄
start:          //modbus_bit 起始编号
inum:           //数量
pdata:          //设置的位状态，按位存储
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Modbus_Set0x(PMC_HANDLE handle, uint16 start, uint16 inum, const uint8* pdata);

/*************************************************************
Description:    //modbus寄存器操作 modbus_bit读取
handle:         //控制器连接句柄	 
start:          //modbus_bit 起始编号
inum:           //数量
pdata:          //返回的位状态，按位存储
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Modbus_Get0x(PMC_HANDLE handle, uint16 start, uint16 inum, uint8* pdata);

/*************************************************************
Description:    //modbus寄存器操作 MODBUS_REG设置
handle:         //控制器连接句柄	 
start:          //modbus_reg 起始编号
inum:           //数量
pdata:          //设置的REG寄存器值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Modbus_Set4x(PMC_HANDLE handle, uint16 start, uint16 inum, const uint16* pdata);

/*************************************************************
Description:    //modbus寄存器操作 MODBUS_REG读取
handle:         //控制器连接句柄	 
start:          //modbus_reg 起始编号
inum:           //数量
pdata:          //返回的REG寄存器值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Modbus_Get4x(PMC_HANDLE handle, uint16 start, uint16 inum, uint16* pdata);

/*************************************************************
Description:    //modbus寄存器	MODBUS_IEEE读取
handle:         //控制器连接句柄	 
start:          //modbus_ieee 起始编号
inum:           //数量
pfdata:         //返回的IEEE寄存器值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Modbus_Get4x_Float(PMC_HANDLE handle, uint16 start, uint16 inum, float* pfdata);

/*************************************************************
Description:    //modbus寄存器操作	MODBUS_IEEE设置
handle:         //控制器连接句柄	 
start:          //modbus_ieee 起始编号
inum:           //数量
pfdata:         //设置的IEEE寄存器值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Modbus_Set4x_Float(PMC_HANDLE handle, uint16 start, uint16 inum, const float* pfdata);

/*************************************************************
Description:    //modbus寄存器操作	MODBUS_LONG读取
handle:         //控制器连接句柄	 
start:          //modbus_long 起始编号
inum:           //数量
pidata:         //返回的LONG寄存器值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Modbus_Get4x_Long(PMC_HANDLE handle, uint16 start, uint16 inum, int32* pidata);

/*************************************************************
Description:    //modbus寄存器操作 MODBUS_LONG设置
handle:         //控制器连接句柄	 
start:          //modbus_long 起始编号
inum:           //数量
pidata:         //设置的LONG寄存器值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Modbus_Set4x_Long(PMC_HANDLE handle, uint16 start, uint16 inum, const int32* pidata);

/*************************************************************
Description:    //写用户flash块, float数据
handle:         //控制器连接句柄	
uiflashid:      //flash块号
uinumes:        //变量个数
pfvalue:        //写入的数据列表
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_FlashWritef(PMC_HANDLE handle, uint16 uiflashid, uint32 uinumes, const float *pfvalue);

/*************************************************************
Description:    //读取用户flash块, float数据
handle:         //控制器连接句柄	
uiflashid:      //flash块号
uibuffnum:      //缓冲变量个数
pfvalue:        //返回的数据列表
puinumesread:   //返回的变量个数
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_FlashReadf(PMC_HANDLE handle, uint16 uiflashid, uint32 uibuffnum, float *pfvalue, uint32* puinumesread);

/*************************************************************
Description:    //示波器触发函数
handle:         //控制器连接句柄	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Trigger(PMC_HANDLE handle);

/*************************************************************
Description:    //读取示波器触发函数
handle:         //控制器连接句柄
pTrigger:		//返回的示波器触发状态
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetTrigger(PMC_HANDLE handle, int *pTrigger);

/*************************************************************
Description:    //软件位置比较输出PSWITCH
handle:         //控制器连接句柄	
num:            //比较器编号 
enable:         //比较器使能  0/1
axisnum:        //比较的轴号 
outnum:         //输出口编号 
outstate:       //输出状态	0/1
setpos:         //比较起始位置	
resetpos:       //输出复位位置	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_Pswitch(PMC_HANDLE handle, int num, int enable, int axisnum, int outnum, int outstate, float setpos, float resetpos);

/*************************************************************
Description:    //硬件位置比较输出
handle:         //控制器连接句柄
Axisnum:        //比较的轴号 	
Mode:           //模式，1-启动比较器, 2-停止并删除没完成的比较点
Direction:      //方向  0-坐标负向,  1-坐标正向  
Reserve:        //预留    
Tablestart:     //TABLE起始点，第一个比较点坐标所在TABLE编号
Tableend:       //TABLE结束点，最后一个比较点坐标所在TABLE编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_HwPswitch(PMC_HANDLE handle, int Axisnum, int Mode, int Direction, int Reserve, int Tablestart, int Tableend);

/*************************************************************
Description:    //硬件位置比较输出2
handle:         //控制器连接句柄	
Axisnum:        //比较输出的轴号
Mode:           //模式								
Opnum:          //输出口编号				
Opstate:        //第一个比较点的输出状态，0-关闭 1打开										
ModePara1:      //多功能参数1					 
ModePara2:      //多功能参数2				
ModePara3:      //多功能参数3				
ModePara4:      //多功能参数4				

mode 1-启动比较器 
		ModePara1 =  第一个比较点坐标所在TABLE编号
		ModePara2 =	 最后一个比较点坐标所在TABLE编号
		ModePara3 =  第一个点判断方向,  0-坐标负向,  1- 坐标正向,  -1-不使用方向
		ModePara4 =	 预留

mode 2- 停止并删除没完成的比较点
		ModePara1 =  预留
		ModePara2 =	 预留
		ModePara3 =  预留
		ModePara4 =	 预留

mode 3- 矢量比较方式
		ModePara1 =  第一个比较点坐标所在TABLE编号
		ModePara2 =	 最后一个比较点坐标所在TABLE编号
		ModePara3 =  预留
		ModePara4 =	 预留

Mode=4 :矢量比较方式, 单个比较点
		ModePara1 =  比较点坐标
		ModePara2 =	 预留
		ModePara3 =  预留
		ModePara4 =	 预留

Mode=5 :矢量比较方式, 周期脉冲模式
		ModePara1 =  比较点坐标
		ModePara2 =	 重复周期, 一个周期内比较两次, 先输出有效状态,再输出无效状态.
		ModePara3 =  周期距离, 每隔这个距离输出Opstate, 输出有效状态的距离（ModePara4）后还原为无效状态.
		ModePara4 =	 输出有效状态的距离,  (ModePara3- ModePara4) 为无效状态距离

Mode=6 :矢量比较方式, 周期模式, 这种模式一般与HW_TIMER一起使用.
		ModePara1 =  比较点坐标
		ModePara2 =	 重复周期, 一个周期只比较一次
		ModePara3 =  周期距离, 每隔这个距离输出一次
		ModePara4 =	 预留
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_HwPswitch2(PMC_HANDLE handle, int Axisnum, int Mode, int Opnum, int Opstate, float ModePara1, float ModePara2, float ModePara3, float ModePara4);

/*************************************************************
Description:    //硬件位置比较输出剩余缓冲获取
axisnum:        //控制器连接句柄
Input:          //比较输出的轴号
buff:			//返回的位置比较输出剩余缓冲数	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetHwPswitchBuff(PMC_HANDLE handle, int axisnum, int *buff);

/*************************************************************
Description:    //硬件定时器用于硬件比较输出后一段时间后还原电平
Input:          //卡链接		handle  
mode:           //模式，0-停止, 2-启动			
cyclonetime:    //周期时间，us单位
optime:         //有效时间，us单位
reptimes:       //重复次数	   
opstate:        //输出缺省状态，输出口变为非此状态后开始计时
opnum:          //输出口编号，必须能硬件比较输出的口
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_HwTimer(PMC_HANDLE handle, int mode, int cyclonetime, int optime, int reptimes, int opstate, int opnum);

/*************************************************************
Description:    //读取轴历史停止原因锁存
handle:         //控制器连接句柄	
iaxis:          //轴号
piValue:        //返回的状态值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetAxisStopReason(PMC_HANDLE handle, int iaxis, int32 *piValue);

/*************************************************************
Description:    //设置轴历史停止原因锁存
handle:         //控制器连接句柄	
iaxis:          //轴号
iValue:         //设置状态值，对应的位表示不同状态
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetAxisStopReason(PMC_HANDLE handle, int iaxis, int32 iValue);

/*************************************************************
Description:    	//获取控制器最大规格数
handle:         	//控制器连接句柄	 
Max_VirtuAxises:	//返回的最大虚拟轴数
Max_motor:          //返回的最大电机数量
Max_io:        		//返回的最大IN,OUT,AD,DA数量				
Return:         	//错误码
*************************************************************/
int32 __stdcall PMC_GetSysSpecification(PMC_HANDLE handle, uint16 *Max_VirtuAxises, uint16 *Max_motor, uint16 *Max_io);

/********************  函数 新增 ***********************/
/*************************************************************
Description:    //运动中修改PWM 
handle:         //控制器连接句柄	
base_axis:      //插补主轴编号
pwm_num:        //PWM口编号
pwm_duty:       //设置的占空比
pwm_freq:       //设置的频率
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MovePwm(PMC_HANDLE handle, uint32 base_axis, uint32 pwm_num, float pwm_duty, float pwm_freq);

/*************************************************************
Description:    //运动中修改TABLE
handle:         //控制器连接句柄	
base_axis:      //插补主轴编号
table_num:      //TABLE编号
fvalue:         //修改的值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveTable(PMC_HANDLE handle, uint32 base_axis, uint32 table_num, float fvalue);

/*************************************************************
Description:    //BASE轴运动缓冲加入一个TASK任务 当任务已经启动时，会报错，但不影响程序执行。
handle:         //控制器连接句柄				
base_axis:      //插补主轴编号
tasknum:        //任务编号 
labelname:      //BAS中全局函数名或者标号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveTask(PMC_HANDLE handle, uint32 base_axis, uint32 tasknum, const char *labelname);

/*************************************************************
Description:    //BASE轴运动缓冲加入一个可变的延时 
handle:         //控制器连接句柄	
base_axis:      //插补主轴编号
paraname:       //参数名字符串 DPOS MPOS IN AIN VPSPEED MSPEED MODBUS_REG MODBUS_IEEE MODBUS_BIT NVRAM VECT_BUFFED  REMAIN 
inum:           //参数编号或轴号
Cmp_mode:       //比较条件 1 >=   0=  -1<=  对IN等BIT类型参数无效。
fvalue:         //比较值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveWait(PMC_HANDLE handle, uint32 base_axis, const char *paraname, int inum, int Cmp_mode, float fvalue);

/*************************************************************
Description:    //相对位置时间插补
handle:         //控制器连接句柄	
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
ftimes:         //时间长度，单位毫秒
pfDisancelist:  //运动的距离列表
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MovePt(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float ftimes, const float *pfDisancelist);

/*************************************************************
Description:    //绝对位置时间插补
handle:         //控制器连接句柄	
imaxaxises:     //参与运动总轴数
piAxislist:     //轴列表数组
ftimes:         //时间长度，单位毫秒
pfDisancelist:  //运动的距离列表
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MovePtAbs(PMC_HANDLE handle, int imaxaxises, const int *piAxislist, float ftimes, const float *pfDisancelist);

/*************************************************************
Description:    //运动中修改参数
handle:         //控制器连接句柄	
base_axis:      //插补主轴编号
paraname:       //参数名称字符串
iaxis:          //修改参数的轴号
fvalue:         //设置的参数值
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MovePara(PMC_HANDLE handle, uint32 base_axis, const char *paraname, uint32 iaxis, float fvalue);

/*************************************************************
Description:    //BASE轴运动缓冲加入一个MOVE_LIST指令
handle:         //控制器连接句柄	 
base_axis:      //插补主轴编号
imaxparas:      //参数个数
pfvaluelist:    //值列表
				  pfvaluelist[0]，指令类型
				  当 pfvaluelist[0]=0 时为列表输出功能
				     pfvaluelist[1]   TABLE列表起始位置index，第i个数据：TABLE[index*i] 存放输出口编号，TABLE[index*i +1] 存放输出口状态
				  当 pfvaluelist[0]=1 时为比较输出功能
				     pfvaluelist[1]  比较功能模式 =0 关闭比较输出功能  1 打开
				     pfvaluelist[2]  输出口编号inum。
				     pfvaluelist[3]  输出口状态state
				     pfvaluelist[4]  相对矢量距离，大于0有效，到达此条件时op(inum)=state
				     pfvaluelist[5]  保持state的时间，时间到自动设置输出口为反状态，大于0有效,到达此条件时op(inum)= not state
				  当 pfvaluelist[0]=2 时为输入计数功能，注意：计数频率小于1000HZ。一次翻转计数加1，如果是一个脉冲，计数加2。
				     pfvaluelist[1]  计数是否使能 =0 关闭  1 打开
				     pfvaluelist[2]  计数通道 0-32
				     pfvaluelist[3]  当bifenable=1时有效，输入通道
				     pfvaluelist[4]  TABLE编号index,当bifenable=1时有效，将计数值保持在TABLE(index)中
				  当 pfvaluelist[0]=3 时为输入判断
				     pfvaluelist[1]  输入口编号
				     pfvaluelist[2]  输入口状态
				     pfvaluelist[3]  TABLE编号index,当in(inchannel)= state时，modbus_reg(index)=value 否则modbus_reg(index)=0
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveList(PMC_HANDLE handle, uint32 base_axis, uint32 imaxparas, const float *pfvaluelist);

/*************************************************************
Description:    //BASE轴运动缓冲加入一个位置比较PSWITCH
handle:         //控制器连接句柄	
base_axis:      //插补主轴编号
num:            //比较器编号 
enable:         //比较器使能，0/1
axisnum:        //比较的轴号 
outnum:         //输出口编号 
outstate:       //输出状态，0/1
setpos:         //比较起始位置	
resetpos:       //输出复位位置	
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MovePswitch(PMC_HANDLE handle, uint32 base_axis, int num, int enable, int axisnum, int outnum, int outstate, float setpos, float resetpos);

/*************************************************************
Description:    //BASE轴运动缓冲加入一个硬件位置比较输出
handle:         //控制器连接句柄	
base_axis:      //插补主轴编号
axisnum:        //比较的轴号
mode:           //模式，1-启动比较器, 2-停止并删除没完成的比较点
direction:      //方向，0-坐标负向,  1- 坐标正向  
reserve:        //预留
tableStart:     //TABLE起始点，第一个比较点坐标所在TABLE编号
tableEnd:       //TABLE结束点，最后一个比较点坐标所在TABLE编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveHwPswitch(PMC_HANDLE handle, uint32 base_axis, int axisnum, int mode, int direction, int reserve, int tableStart, int tableEnd);

/*************************************************************
Description:    //BASE轴运动缓冲加入一个硬件位置比较输出2
handle:         //控制器连接句柄
base_axis:      //插补主轴编号
axisnum:        //比较输出的轴号
mode:           //模式
opnum:          //输出口编号
opstate:        //第一个比较点的输出状态，0-关闭 1打开
ModePara1:      //多功能参数1
ModePara2:      //多功能参数2
ModePara3:      //多功能参数3
ModePara4:      //多功能参数4

mode 1-启动比较器, 
		ModePara1 =  第一个比较点坐标所在TABLE编号
		ModePara2 =	 最后一个比较点坐标所在TABLE编号
		ModePara3 =  第一个点判断方向,  0-坐标负向,  1- 坐标正向,  -1-不使用方向
		ModePara4 =	 预留

mode 2- 停止并删除没完成的比较点. 
		ModePara1 =  预留
		ModePara2 =	 预留
		ModePara3 =  预留
		ModePara4 =	 预留

mode 3- 矢量比较方式
		ModePara1 =  第一个比较点坐标所在TABLE编号
		ModePara2 =	 最后一个比较点坐标所在TABLE编号
		ModePara3 =  预留
		ModePara4 =	 预留

Mode=4 :矢量比较方式, 单个比较点
		ModePara1 =  比较点坐标
		ModePara2 =	 预留
		ModePara3 =  预留
		ModePara4 =	 预留

Mode=5 :矢量比较方式, 周期脉冲模式
		ModePara1 =  比较点坐标
		ModePara2 =	 重复周期, 一个周期内比较两次, 先输出有效状态,再输出无效状态.
		ModePara3 =  周期距离, 每隔这个距离输出opstate, 输出有效状态的距离（ModePara4）后还原为无效状态.
		ModePara4 =	 输出有效状态的距离,  (ModePara3- ModePara4) 为无效状态距离

Mode=6 :矢量比较方式, 周期模式, 这种模式一般与HW_TIMER一起使用.
		ModePara1 =  比较点坐标
		ModePara2 =	 重复周期, 一个周期只比较一次
		ModePara3 =  周期距离, 每隔这个距离输出一次
		ModePara4 =	 预留
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveHwPswitch2(PMC_HANDLE handle, uint32 base_axis, int axisnum, int mode, int opnum, int opstate, float ModePara1, float ModePara2, float ModePara3, float ModePara4);

/*************************************************************
Description:    //BASE轴运动缓冲加入一个硬件定时器
handle:         //控制器连接句柄  
base_axis:      //插补主轴编号
mode:           //模式，0停止,  2-启动			
cyclonetime:    //周期时间，us单位
optime:         //有效时间，us单位
reptimes:       //重复次数	   
opstate:        //输出缺省状态，输出口变为非此状态后开始计时
opnum:          //输出口编号，必须能硬件比较输出的口
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MoveHwTimer(PMC_HANDLE handle, uint32 base_axis, int mode, int cyclonetime, int optime, int reptimes, int opstate, int opnum);

/*************************************************************
Description:    //连续位置锁存指令
handle:         //控制器连接句柄  
iaxis:          //轴号 
imode:          //锁存模式			
iTabStart:      //连续锁存的内容存储的table位置，第一个table元素存储锁存的个数，后面存储锁存的坐标，最多保存个数= numes-1，溢出时循环写入
iTabNum:        //占用的table个数
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_CycleRegist(PMC_HANDLE handle, int iaxis, int imode, int iTabStart, int iTabNum);

/*************************************************************
Description:    //设置多个输出信号
handle:         //控制器连接句柄	
startio:        //输出口起始编号
endio:          //输出口结束编号
iValue:         //设置的输出口状态，按位设置
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetOpMulti(PMC_HANDLE handle, int startio, int endio, int32 iValue);

/*************************************************************
Description:    //读取多个输出信号
handle:         //控制器连接句柄	
startio:        //输出口起始编号
endio:          //输出口结束编号
piValue:        //返回的输出口状态
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetOpMulti(PMC_HANDLE handle, int startio, int endio, int32 *piValue);

/*************************************************************
Description:    //读取多个输入信号
handle:         //控制器连接句柄	
startio:        //输入口起始编号
endio:          //输入口结束编号
piValue:        //返回的按位获取的输入口状态值。最多存储32个输出口状态
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetInMulti(PMC_HANDLE handle, int startio, int endio, int32 *piValue);

/*************************************************************
Description:    //多条相对直线插补运动
handle:         //控制器连接句柄	
iMoveLen:       //发送运行指令数量 
imaxaxises:     //参与运动总轴数 
piAxislist:     //轴列表数组 
pfDposlist:     //运动位置列表 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MultiMove(PMC_HANDLE handle, int iMoveLen, int imaxaxises, const int* piAxislist, const float* pfDposlist);

/*************************************************************
Description:    //多条绝对直线插补运动
handle:         //控制器连接句柄	
iMoveLen:       //发送运行指令数量 
imaxaxises:     //参与运动总轴数 
piAxislist:     //轴列表数组 
pfDposlist:     //运动位置列表 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MultiMoveAbs(PMC_HANDLE handle, int iMoveLen, int imaxaxises, const int* piAxislist, const float* pfDposlist);

/*************************************************************
Description:    //多条相对PT运动
handle:         //控制器连接句柄	
iMoveLen:       //发送运行指令数量 
imaxaxises:     //参与运动总轴数 
piAxislist:     //轴列表数组
pTickslist:     //周期列表 
pfDposlist:     //运动位置列表 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MultiMovePt(PMC_HANDLE handle, int iMoveLen, int imaxaxises, const int* piAxislist, const int* pTickslist, const float* pfDposlist);

/*************************************************************
Description:    //多条绝对PT运动
handle:         //控制器连接句柄	
iMoveLen:       //发送运行指令数量 
imaxaxises:     //参与运动总轴数 
piAxislist:     //轴列表数组
pTickslist:     //周期列表 
pfDposlist:     //运动位置列表 
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_MultiMovePtAbs(PMC_HANDLE handle, int iMoveLen, int imaxaxises, const int* piAxislist, const int* pTickslist, const float* pfDposlist);

/*************************************************************
Description:    //读取是否动态变速
handle:         //控制器连接句柄
iaxis:          //轴号
piValue:        //返回的状态，0否，1是
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetSpeedDyna(PMC_HANDLE handle, int iaxis, int32 *piValue);

/*************************************************************
Description:    //设置是否动态变速
handle:         //控制器连接句柄	
iaxis:          //轴号
iValue:         //是否动态变速
				  0 关闭动态速度
				  1 打开动态速度，此时修改SPEED，实时修改正在运动的指令速度
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetSpeedDyna(PMC_HANDLE handle, int iaxis, int32 iValue);

/*************************************************************
Description:    //读取轴速度比例，0-1
handle:         //控制器连接句柄	
iaxis:          //轴号
pfValue:        //返回的轴速度比例，轴实际运动速度为SPEED*SPEED_RATIO。用于运动中根据加减速的平滑速度改变。
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetSpeedRatio(PMC_HANDLE handle, int iaxis, float *pfValue);

/*************************************************************
Description:    //设置轴速度比例，0-1 
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的轴速度比例，轴实际运动速度为SPEED*SPEED_RATIO。用于运动中根据加减速的平滑速度改变。
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetSpeedRatio(PMC_HANDLE handle, int iaxis, float fValue);

/********************  总线的函数 新增 ***********************/
/*************************************************************
Description:    //设置模拟量输出 力矩、速度模式下可以  总线驱动需要设置对应DRIVE_PROFILE类型 与ATYPE
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的模拟量输出值
Return:         //错误码
*************************************************************/
int32 PMC_SetDAC(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取模拟量输出 力矩、速度模式下可以  总线驱动需要设置对应DRIVE_PROFILE类型 与ATYPE
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //返回的模拟量值
Return:         //错误码
*************************************************************/
int32 PMC_GetDAC(PMC_HANDLE handle, int iaxis, float *fValue);

/*************************************************************
Description:    //总线初始化
handle:         //控制器连接句柄	
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_InitBus(PMC_HANDLE handle);

/*************************************************************
Description:    //获取总线初始化完成状态
handle:         //控制器连接句柄	
piValue:        //返回的状态值，0-初始化失败 1-成功
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_GetInitStatus(PMC_HANDLE handle, int *piValue);

/*************************************************************
Description:    //读取卡槽上节点数量
handle:         //控制器连接句柄
slot:           //槽位号缺省0
piValue:        //返回的扫描成功节点数量
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_GetNodeNum(PMC_HANDLE handle, int slot, int *piValue);

/*************************************************************
Description:    //读取节点上的信息
handle:         //控制器连接句柄	 
slot:           //槽位号
node:           //节点编号
sel:            //信息编号，0-厂商编号1-设备编号 2-设备版本 3-别名 10-IN个数 11-OUT个数 
piValue:        //返回的信息
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_GetNodeInfo(PMC_HANDLE handle, int slot, int node, int sel, int32 *piValue);

/*************************************************************
Description:    //读取节点总线状态
handle:         //控制器连接句柄	
slot:           //槽位号缺省0
node:           //节点编号
nodestatus:     //返回的状态值，按位处理 bit0-节点是否存在  bit1-通讯状态   bit2-节点状态
				  值为1时，bit0为1，bit1和bit2为0，设备通讯正常
				  值为3时，bit0和bit1为1，bit2为0，设备通讯出错
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_GetNodeStatus(PMC_HANDLE handle, int slot, int node, uint32 *nodestatus);

/*************************************************************
Description:    //读取节点SDO参数信息
handle:         //控制器连接句柄	
slot:           //槽位号，缺省0
node:           //节点编号
index:          //对象字典编号（注意函数为10进制数据）
subindex:       //子编号（注意函数为10进制数据）
type:           //数据类型  1-bool 2-int8 3-int16 4-int32 5-uint8 6-uint16 7-uint32
value:          //返回的数据值
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_SDORead(PMC_HANDLE handle, int slot, int node, int index, int subindex, int type, int32 *value);

/*************************************************************
Description:    //写节点SDO参数信息
handle:         //控制器连接句柄	
slot:           //槽位号，缺省0
node:           //节点编号
index:          //对象字典编号（注意函数为10进制数据）
subindex:       //子编号（注意函数为10进制数据）
type:           //数据类型  1-bool 2-int8 3-int16 4-int32 5-uint8 6-uint16 7-uint32
value:          //设置的数据值
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_SDOWrite(PMC_HANDLE handle, int slot, int node, int index, int subindex, int type, int32 value);

/*************************************************************
Description:    //设置回零偏移距离
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //设置的偏移距离
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_SetDatumOffpos(PMC_HANDLE handle, int iaxis, float fValue);

/*************************************************************
Description:    //读取回零偏移距离
handle:         //控制器连接句柄	
iaxis:          //轴号
fValue:         //返回的偏移距离
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_GetDatumOffpos(PMC_HANDLE handle, int iaxis, float *fValue);

/*************************************************************
Description:    //总线驱动器回零
handle:         //控制器连接句柄	
iaxis:          //轴号
homemode:       //回零模式，查看驱动器手册
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_Datum(PMC_HANDLE handle, int iaxis, uint32 homemode);

/*************************************************************
Description:    //驱动器回零完成状态
handle:         //控制器连接句柄	
iaxis:          //轴号 
homestatus:     //返回的回零完成标志 0-回零异常 1-回零成功
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_GetHomeStatus(PMC_HANDLE handle, int iaxis, uint32 *homestatus);

/*************************************************************
Description:    //设置清除总线伺服报警
handle:         //控制器连接句柄	 
iaxis:          //轴号
mode:           //设置的模式 0-清除当前告警  1-清除历史告警  2-清除外部输入告警
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_DriveClear(PMC_HANDLE handle, int iaxis, uint32 mode);

/*************************************************************
Description:    //读取当前总线驱动当前力矩	需要设置对应的DRIVE_PROFILE类型
handle:         //控制器连接句柄	
iaxis:          //轴号
piValue:        //返回的当前转矩
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_GetDriveTorque(PMC_HANDLE handle, int iaxis, int32 *piValue);

/*************************************************************
Description:    //设置当前总线驱动最大转矩  需要设置对应的DRIVE_PROFILE类型
handle:         //控制器连接句柄			
iaxis:          //轴号
piValue:        //设置的最大转矩限制
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_SetMaxDriveTorque(PMC_HANDLE handle, int iaxis, int32 piValue);

/*************************************************************
Description:    //读取当前总线驱动最大转矩  需要设置对应的DRIVE_PROFILE类型
handle:         //控制器连接句柄	
iaxis:          //轴号
piValue:        //返回的最大转矩
Return:         //错误码
*************************************************************/
int32 PMC_BusCmd_GetMaxDriveTorque(PMC_HANDLE handle, int iaxis, int32 *piValue);

/*************************************************************
Description:    //读取软件编号
handle:         //控制器连接句柄	
pId：  			//返回的软件编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetIdSoftware(PMC_HANDLE handle, uint16 *pId);

/*************************************************************
Description:    //读取硬件编号
handle:         //控制器连接句柄
pId：  			//返回的硬件编号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetIdHardware(PMC_HANDLE handle, uint16 *pId);

/*************************************************************
Description:    //读取软件版本号，用日期标识
handle:         //控制器连接句柄	
pVersion：  	//返回的软件版本号，用日期标识
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetSoftwareVersion(PMC_HANDLE handle, uint32 *pVersion);

/*************************************************************
Description:    //读取硬件版本号
handle:         //控制器连接句柄	
pVersion：  	//返回的硬件版本号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetHardVersion(PMC_HANDLE handle, uint32 *pVersion);

/*************************************************************
Description:    //读取控制器名称
handle:         //控制器连接句柄	
pName：  		//返回的控制器名称
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetControllerName(PMC_HANDLE handle, char *pName);

/*************************************************************
Description:    //读取控制器序列号
handle:         //控制器连接句柄	
pIdentifier:    //返回的控制器序列号
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetIdentifier(PMC_HANDLE handle, uint32 *pIdentifier);

/*************************************************************
Description:    //读取脚本输出的信息
handle:         //控制器连接句柄	
pbuff:          //缓冲数组，用于接收输出信息
uimax:          //缓冲数组的大小，不包含’\0’
puiread：  		//返回的接收到的输出信息大小
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_ReadMessage(PMC_HANDLE handle, char *pbuff, uint32 uimax, uint32 *puiread);

/*************************************************************
Description:    //计算取矢量长度
handle:         //控制器连接句柄	
itype:          //类型
				  itype = 0：初始化，起始位置点
				  itype = 1：直线，终点位置
				  itype = 2：绝对三点圆弧，中间点、结束点
				  itype = 255: table模式，index[输入table编号]，returnindex计算结果table编号
				  table[index ~ ] 段数，[类型1，类型1数据列表, 类型2，类型2数据列表，。。。]
				  table[returnindex~]返回段数，[类型1矢量长度, 类型2矢量长度，。。。]
imaxaxises:     //轴数
piAxislist:     //轴列表数组
pfDisancelist:  //位置参数，绝对位置
pVectLength:    //返回的矢量长度
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_GetVectLength(PMC_HANDLE handle, int itype, int imaxaxises, const int *piAxislist, const float *pfDisancelist, float *pVectLength);

/*************************************************************
Description:    ////主动上报的回调函数格式
handle:         //控制器连接句柄	
itypecode:      //上传类型码
idatalength:    //数据长度
pdata:          //数据指针
Return:         //错误码
*************************************************************/
typedef void (*PMCAutoUpCallBack)(PMC_HANDLE handle, int32 itypecode, int32 idatalength, const uint8 *pdata); 

/*************************************************************
Description:    //控制器自动上报
handle:         //控制器连接句柄 
pcallback:      //回调函数
Return:         //错误码
*************************************************************/
int32 __stdcall PMC_SetAutoUpCallBack(PMC_HANDLE handle, PMCAutoUpCallBack pcallback);


/****************************** liwishell自定义 ******************************/
#include <string>
#include <vector>

namespace Custom
{
	int Execute(PMC_HANDLE handle, const char* pszCommand, std::string &psResponse);
	std::string GetArrayNames(const char *arrayName, int arrayStart, int numes);
	int GetVariables(PMC_HANDLE handle, const char *pszCommand, int *values);
	int GetVariables(PMC_HANDLE handle, const char *pszCommand, float *values);
	int GetVariable(PMC_HANDLE handle, const char *pszCommand, int *value);
	int GetVariable(PMC_HANDLE handle, const char *pszCommand, float *value);
}

namespace Convert
{
	std::string std_string_format(const char *format, ...);
	std::string stringJoin(const std::string &separator, const std::vector<std::string> &strings);
	std::vector<std::string> stringSplit(const std::string &input, const std::string &delimiter);
}

/*************************************************************
Description:    //设置BASIC自定义变量
handle:         //控制器连接句柄
varName:        //变量名称字符串
value:          //设置值
Return:         //错误码
*************************************************************/
int PMC_SetUserVar(PMC_HANDLE handle, const char* varName, int value);

/*************************************************************
Description:    //设置BASIC自定义变量
handle:         //控制器连接句柄
varName:        //变量名称字符串
value:          //设置值
Return:         //错误码
*************************************************************/
int PMC_SetUserVar(PMC_HANDLE handle, const char* varName, float value);

/*************************************************************
Description:    //读取BASIC自定义变量
handle:         //控制器连接句柄
varName:        //变量名称字符串
piValue:        //返回的反馈值
Return:         //错误码
*************************************************************/
int PMC_GetUserVar(PMC_HANDLE handle, const char* varName, int *piValue);

/*************************************************************
Description:    //读取BASIC自定义变量
handle:         //控制器连接句柄
varName:        //变量名称字符串
pfValue:        //返回的反馈值
Return:         //错误码
*************************************************************/
int PMC_GetUserVar(PMC_HANDLE handle, const char* varName, float *pfValue);

/*************************************************************
Description:    //设置BASIC自定义全局数组
handle:         //控制器连接句柄
arrayName:      //全局数组名称
arrayStart:     //数组起始元素
numes:          //设置数量
piValue:        //设置值
Return:         //错误码
*************************************************************/
int PMC_SetUserArray(PMC_HANDLE handle, const char* arrayName, int arrayStart, int numes, const int *piValue);

/*************************************************************
Description:    //设置BASIC自定义全局数组
handle:         //控制器连接句柄
arrayName:      //全局数组名称
arrayStart:     //数组起始元素
numes:          //设置数量
pfValue:        //设置值
Return:         //错误码
*************************************************************/
int PMC_SetUserArray(PMC_HANDLE handle, const char* arrayName, int arrayStart, int numes, const float *pfValue);

/*************************************************************
Description:    //读取BASIC自定义全局数组
handle:         //控制器连接句柄
arrayName:      //全局数组名称
arrayStart:     //数组起始元素
numes:          //读取数量
piValue:        //返回的反馈值
Return:         //错误码
*************************************************************/
int PMC_GetUserArray(PMC_HANDLE handle, const char* arrayName, int arrayStart, int numes, int *piValue);

/*************************************************************
Description:    //读取BASIC自定义全局数组
handle:         //控制器连接句柄
arrayName:      //全局数组名称
arrayStart:     //数组起始元素
numes:          //读取数量
pfValue:        //返回的反馈值
Return:         //错误码
*************************************************************/
int PMC_GetUserArray(PMC_HANDLE handle, const char* arrayName, int arrayStart, int numes, float *pfValue);

#endif
